summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CREDITS10
-rw-r--r--ChangeLog33
-rw-r--r--Makefile.am2
-rw-r--r--Makefile.in765
-rw-r--r--aapl/Makefile.in394
-rw-r--r--aapl/bstcommon.h4
-rw-r--r--aclocal.m4971
-rwxr-xr-xconfigure5905
-rw-r--r--configure.in29
-rw-r--r--contrib/Makefile.in334
-rw-r--r--contrib/ragel.m416
-rwxr-xr-xdepcomp688
-rw-r--r--doc/Makefile.am4
-rw-r--r--doc/Makefile.in500
-rw-r--r--doc/RELEASE_NOTES_V286
-rw-r--r--doc/RELEASE_NOTES_V38
-rw-r--r--doc/RELEASE_NOTES_V4361
-rw-r--r--doc/RELEASE_NOTES_V5112
-rw-r--r--doc/RELEASE_NOTES_V695
-rw-r--r--doc/extract.awk41
-rw-r--r--doc/fixbackbox.awk10
-rwxr-xr-xdoc/genfigs.sh18
-rw-r--r--doc/ragel-guide.pdf9783
-rw-r--r--doc/ragel-guide.tex66
-rw-r--r--doc/ragel.1.in29
-rw-r--r--examples/Makefile.in620
-rw-r--r--examples/atoi.cpp120
-rw-r--r--examples/awkemu.c217
-rwxr-xr-xexamples/awkequiv.awk10
-rw-r--r--examples/clang.c456
-rw-r--r--examples/concurrent.cpp986
-rw-r--r--examples/cppscan.cpp908
-rw-r--r--examples/cppscan.lex143
-rw-r--r--examples/cppscan.rec183
-rw-r--r--examples/format.c544
-rw-r--r--examples/gotocallret.cpp282
-rw-r--r--examples/mailbox.cpp1563
-rw-r--r--examples/params.c374
-rw-r--r--examples/pullscan.c294
-rw-r--r--examples/rlscan.cpp1055
-rw-r--r--examples/statechart.cpp187
-rw-r--r--examples/uri.rl31
-rwxr-xr-xinstall-sh527
-rwxr-xr-xmissing331
-rw-r--r--packaging/ragel.changes6
-rw-r--r--packaging/ragel.spec15
-rw-r--r--ragel-d.vim156
-rw-r--r--ragel-java.vim151
-rw-r--r--ragel-m.vim154
-rw-r--r--ragel.vim8
-rw-r--r--ragel/Makefile.am8
-rw-r--r--ragel/Makefile.in1427
-rw-r--r--ragel/cdcodegen.cpp152
-rw-r--r--ragel/cdcodegen.h37
-rw-r--r--ragel/cdfflat.cpp6
-rw-r--r--ragel/cdfflat.h10
-rw-r--r--ragel/cdfgoto.h10
-rw-r--r--ragel/cdflat.cpp10
-rw-r--r--ragel/cdflat.h10
-rw-r--r--ragel/cdftable.cpp2
-rw-r--r--ragel/cdftable.h10
-rw-r--r--ragel/cdgoto.cpp28
-rw-r--r--ragel/cdgoto.h10
-rw-r--r--ragel/cdipgoto.h10
-rw-r--r--ragel/cdsplit.h10
-rw-r--r--ragel/cdtable.cpp28
-rw-r--r--ragel/cdtable.h10
-rw-r--r--ragel/common.cpp112
-rw-r--r--ragel/common.h7
-rw-r--r--ragel/config.h.in25
-rw-r--r--ragel/cscodegen.cpp13
-rw-r--r--ragel/csflat.cpp18
-rw-r--r--ragel/csflat.h2
-rw-r--r--ragel/cstable.cpp22
-rw-r--r--ragel/cstable.h2
-rw-r--r--ragel/fsmap.cpp1
-rw-r--r--ragel/gendata.cpp126
-rw-r--r--ragel/gendata.h2
-rw-r--r--ragel/gocodegen.cpp776
-rw-r--r--ragel/gocodegen.h181
-rw-r--r--ragel/gofflat.cpp380
-rw-r--r--ragel/gofflat.h58
-rw-r--r--ragel/gofgoto.cpp297
-rw-r--r--ragel/gofgoto.h54
-rw-r--r--ragel/goflat.cpp764
-rw-r--r--ragel/goflat.h80
-rw-r--r--ragel/goftable.cpp441
-rw-r--r--ragel/goftable.h59
-rw-r--r--ragel/gogoto.cpp734
-rw-r--r--ragel/gogoto.h83
-rw-r--r--ragel/goipgoto.cpp477
-rw-r--r--ragel/goipgoto.h75
-rw-r--r--ragel/gotable.cpp977
-rw-r--r--ragel/gotable.h76
-rw-r--r--ragel/gotablish.cpp111
-rw-r--r--ragel/gotablish.h48
-rw-r--r--ragel/inputdata.cpp26
-rw-r--r--ragel/inputdata.h2
-rw-r--r--ragel/main.cpp15
-rw-r--r--ragel/mlcodegen.cpp744
-rw-r--r--ragel/mlcodegen.h205
-rw-r--r--ragel/mlfflat.cpp419
-rw-r--r--ragel/mlfflat.h55
-rw-r--r--ragel/mlflat.cpp911
-rw-r--r--ragel/mlflat.h91
-rw-r--r--ragel/mlftable.cpp462
-rw-r--r--ragel/mlftable.h56
-rw-r--r--ragel/mlgoto.cpp821
-rw-r--r--ragel/mlgoto.h89
-rw-r--r--ragel/mltable.cpp1131
-rw-r--r--ragel/mltable.h102
-rw-r--r--ragel/rlparse.cpp1835
-rw-r--r--ragel/rlscan.cpp883
-rw-r--r--ragel/rlscan.rl11
-rw-r--r--ragel/rubycodegen.cpp9
-rw-r--r--ragel/version.h2
-rw-r--r--ragel/xmlcodegen.cpp3
-rw-r--r--ragel/xmlparse.kh209
-rw-r--r--ragel/xmlparse.kl1006
-rw-r--r--ragel/xmlscan.rl313
-rw-r--r--ragel/xmltags.gperf94
-rwxr-xr-xrun_test.sh57
-rw-r--r--test/Makefile.am3
-rw-r--r--test/Makefile.in479
-rw-r--r--test/atoi1.rl2
-rw-r--r--test/atoi2.rl2
-rw-r--r--test/cond7.rl4
-rw-r--r--test/cppscan6.rl2
-rw-r--r--test/langtrans_c.txl18
-rw-r--r--test/langtrans_csharp.txl18
-rw-r--r--test/langtrans_d.txl18
-rw-r--r--test/langtrans_java.txl18
-rw-r--r--test/langtrans_ruby.txl18
-rwxr-xr-xtest/runtests.in42
-rw-r--r--test/testcase.txl1
135 files changed, 43156 insertions, 4384 deletions
diff --git a/CREDITS b/CREDITS
index 2d8bac7..807ed64 100644
--- a/CREDITS
+++ b/CREDITS
@@ -25,6 +25,13 @@ missed.
* C# code generation contributed by Daniel Tang.
+* Go code generation contributed by Justine Tunney. Significantly expanded by
+ Anton Ageev
+
+* D2 patch from Johannes Pfau.
+
+* OCaml patch from ygrek.
+
* Feedback, Packaging, and Fixes provided by:
Bob Tennent, Robert Lemmen, Tobias Jahn, Cris Bailiff, Buddy Betts,
@@ -38,4 +45,5 @@ missed.
Kenny MacDermid, MenTaLguY, Manoj Rajagopalan, Tim Chklovski,
Mikkel Fahnøe Jørgensen, Andrei Polushin, Evan Phoenix, David Balmain,
Ross Thomas, Mitchell Foral, John D. Mitchell, Diego 'Flameeyes' Pettenò,
- Jose Quinteiro, William Morgan, _why, Iñaki Baz Castillo
+ Jose Quinteiro, William Morgan, _why, Iñaki Baz Castillo, Attila Sztupák,
+ Ismael Luceno, Josh Stern, Denis Naumov, Anton Ageev, Kamil Klimkiewicz
diff --git a/ChangeLog b/ChangeLog
index c9c455b..abd2f77 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,31 @@
+Ragel 6.8 - Feb 11, 2013
+========================
+
+ -The -G2 code generator for Go1 was rewritten. Table, flat and switch-based
+ code generators were added. (Anton Ageev)
+ -The CXXFLAGS variable is not longer set in the configure script.
+
+Ragel 6.7 - May 22, 2011
+========================
+ -The C vim file now supports L,l on the end of literal numbers, other syntax
+ highlighting fixes.
+ -Added an explicit cast when modifying _trans to eliminate compiler warnings
+ on Windows/VC++
+ -Fix for ruby 1.9 compatibility.
+ -Fix for include directories (-I option) on Windows/VC++
+ -Can now rename data variable in C# code generator.
+ -Fix for non-char alphtype in C# code generator.
+ -Fix for signedness of wide char in C code generator. when comparing the wide
+ type against a literal we need to pick the right signedness for the literal.
+ -Fixed arithmetic overflow in generated C# code. The C# _acts and _nacts vars
+ should not be typed based on the size of the array elements they point to.
+ Fixes a bug reported by Attila Sztupák.
+ -Made the -L option work for Ruby.
+ -Enhanced ragel.m4 (from Diego).
+ -Applied GO patch from Justine Tunney.
+ -Applied D2 patch from Johannes Pfau.
+ -Applied Ocaml patch from ygrek.
+
Ragel 6.6 - Dec 2, 2009
=======================
-Applied a number of patches from Diego Elio 'Flameeyes' Pettenò. Should not
@@ -17,11 +45,6 @@ Ragel 6.6 - Dec 2, 2009
-Use automake --foreign so we don't need to have INSTALL and NEWS present.
-Ragel VIM syntax files should be specialized by host language. Updated the
VIM syntax files.
- -Just discovered that $srcdir is available in the configure script for
- checking for the existence of a file created by dist-hook. This lets us write
- a test that knows the difference between a distribution tarball and something
- from the repos. The building of the parsers and the manual can now be
- automatically turned off in a make dist tarball.
-Added examples to the dist. Added unicode2ragel.rb to EXTRA_DIST in contrib.
-Moved unicode2ragel.rb to the contrib directory.
diff --git a/Makefile.am b/Makefile.am
index 6d13cf9..bbed893 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,5 @@
-SUBDIRS = ragel
+SUBDIRS = ragel doc
DIST_SUBDIRS = $(SUBDIRS) aapl contrib examples test
dist_doc_DATA = CREDITS ChangeLog
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..a346e5e
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,765 @@
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(dist_doc_DATA) \
+ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/configure AUTHORS COPYING ChangeLog TODO depcomp \
+ install-sh missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/ragel/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(docdir)"
+DATA = $(dist_doc_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ if test -d "$(distdir)"; then \
+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -rf "$(distdir)" \
+ || { sleep 5 && rm -rf "$(distdir)"; }; \
+ else :; fi
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+FIG2DEV = @FIG2DEV@
+GDC = @GDC@
+GMCS = @GMCS@
+GOBIN = @GOBIN@
+GOBJC = @GOBJC@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAC = @JAVAC@
+KELBT = @KELBT@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PDFLATEX = @PDFLATEX@
+PUBDATE = @PUBDATE@
+RAGEL = @RAGEL@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TXL = @TXL@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = ragel doc
+DIST_SUBDIRS = $(SUBDIRS) aapl contrib examples test
+dist_doc_DATA = CREDITS ChangeLog
+EXTRA_DIST = ragel.vim
+all: all-recursive
+
+.SUFFIXES:
+am--refresh: Makefile
+ @:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+install-dist_docDATA: $(dist_doc_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)"
+ @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \
+ done
+
+uninstall-dist_docDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+dist-lzip: distdir
+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+ $(am__remove_distdir)
+
+dist-lzma: distdir
+ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+ $(am__remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+ $(am__remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lzma*) \
+ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+ *.tar.lz*) \
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @test -n '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: trying to run $@ with an empty' \
+ '$$(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ $(am__cd) '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(docdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-dist_docDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-dist_docDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am am--refresh check check-am clean clean-generic \
+ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
+ dist-hook dist-lzip dist-lzma dist-shar dist-tarZ dist-xz \
+ dist-zip distcheck distclean distclean-generic distclean-tags \
+ distcleancheck distdir distuninstallcheck dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dist_docDATA install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
+ tags-recursive uninstall uninstall-am uninstall-dist_docDATA
+
+
+# This file is checked for by the configure script and its existence causes the
+# parsers and the manual to not be built when the distribution is built.
+dist-hook:
+ ( \
+ echo "#!/bin/sh"; \
+ echo ""; \
+ echo "# Change to yes to enable building of parsers or manual. Reconfigure"; \
+ echo "# afterwards."; \
+ echo "build_parsers=no;"; \
+ echo "build_manual=no;"; \
+ ) > $(distdir)/DIST
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/aapl/Makefile.in b/aapl/Makefile.in
new file mode 100644
index 0000000..e04d329
--- /dev/null
+++ b/aapl/Makefile.in
@@ -0,0 +1,394 @@
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = aapl
+DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in COPYING
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/ragel/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+FIG2DEV = @FIG2DEV@
+GDC = @GDC@
+GMCS = @GMCS@
+GOBIN = @GOBIN@
+GOBJC = @GOBJC@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAC = @JAVAC@
+KELBT = @KELBT@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PDFLATEX = @PDFLATEX@
+PUBDATE = @PUBDATE@
+RAGEL = @RAGEL@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TXL = @TXL@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_HEADERS = \
+ avlbasic.h avlimel.h avlmap.h bstcommon.h compare.h insertsort.h \
+ sbstset.h avlcommon.h avlimelkey.h avlmel.h bstmap.h dlcommon.h \
+ mergesort.h sbsttable.h avlibasic.h avliset.h avlmelkey.h bstset.h \
+ dlist.h quicksort.h svector.h avlikeyless.h avlitree.h avlset.h \
+ bsttable.h dlistmel.h resize.h table.h avlimap.h avlkeyless.h avltree.h \
+ bubblesort.h dlistval.h sbstmap.h vector.h
+
+EXTRA_DIST = README COPYING
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign aapl/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign aapl/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ ctags distclean distclean-generic distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/aapl/bstcommon.h b/aapl/bstcommon.h
index 7c53ff3..624b072 100644
--- a/aapl/bstcommon.h
+++ b/aapl/bstcommon.h
@@ -508,7 +508,7 @@ template <BST_TEMPL_DEF> Element *BstTable<BST_TEMPL_USE>::
}
mid = lower + ((upper-lower)>>1);
- keyRelation = this->compare(key, GET_KEY(*mid));
+ keyRelation = compare(key, GET_KEY(*mid));
if ( keyRelation < 0 )
upper = mid - 1;
@@ -603,7 +603,7 @@ template <BST_TEMPL_DEF> Element *BstTable<BST_TEMPL_USE>::
}
mid = lower + ((upper-lower)>>1);
- keyRelation = this->compare(GET_KEY(el), GET_KEY(*mid));
+ keyRelation = compare(GET_KEY(el), GET_KEY(*mid));
if ( keyRelation < 0 )
upper = mid - 1;
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..da06da5
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,971 @@
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software
+# Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.11.3], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.3])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
+# 2010, 2011 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 12
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
+ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], UPC, [depcc="$UPC" am_compiler_list=],
+ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok `-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES(CC)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES(OBJC)],
+ [define([AC_PROG_OBJC],
+ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation,
+# Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
+# Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
+# Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
diff --git a/configure b/configure
new file mode 100755
index 0000000..817df96
--- /dev/null
+++ b/configure
@@ -0,0 +1,5905 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.68 for ragel 6.8.
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ # We cannot yet assume a decent shell, so we have to provide a
+ # neutralization value for shells without unset; and this also
+ # works around shells that cannot unset nonexistent variables.
+ # Preserve -v and -x to the replacement shell.
+ BASH_ENV=/dev/null
+ ENV=/dev/null
+ (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+ export CONFIG_SHELL
+ case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+ esac
+ exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='ragel'
+PACKAGE_TARNAME='ragel'
+PACKAGE_VERSION='6.8'
+PACKAGE_STRING='ragel 6.8'
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+GOBIN
+GMCS
+RUBY
+TXL
+JAVAC
+GOBJC
+GDC
+PDFLATEX
+FIG2DEV
+KELBT
+RAGEL
+RANLIB
+AR
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+ac_ct_CXX
+CXXFLAGS
+CXX
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+BUILD_MANUAL_FALSE
+BUILD_MANUAL_TRUE
+BUILD_PARSERS_FALSE
+BUILD_PARSERS_TRUE
+PUBDATE
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_manual
+enable_dependency_tracking
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CXX
+CXXFLAGS
+CCC'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used" >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures ragel 6.8 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/ragel]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of ragel 6.8:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-manual do we want to build the manual?
+ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to the package provider.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+ragel configure 6.8
+generated by GNU Autoconf 2.68
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by ragel $as_me 6.8, which was
+generated by GNU Autoconf 2.68. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+PUBDATE="Feb 2013"
+
+am__api_version='1.11'
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+ fi
+
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if ${ac_cv_path_mkdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+ [\\/$]* | ?:[\\/]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='ragel'
+ VERSION='6.8'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+ac_config_headers="$ac_config_headers ragel/config.h"
+
+
+as_ac_File=`$as_echo "ac_cv_file_$srcdir/DIST" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $srcdir/DIST" >&5
+$as_echo_n "checking for $srcdir/DIST... " >&6; }
+if eval \${$as_ac_File+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ test "$cross_compiling" = yes &&
+ as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "$srcdir/DIST"; then
+ eval "$as_ac_File=yes"
+else
+ eval "$as_ac_File=no"
+fi
+fi
+eval ac_res=\$$as_ac_File
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_File"\" = x"yes"; then :
+
+cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$srcdir/DIST" | $as_tr_cpp` 1
+_ACEOF
+ . $srcdir/DIST;
+else
+ build_parsers=yes; build_manual=yes;
+fi
+
+
+# Check whether --enable-manual was given.
+if test "${enable_manual+set}" = set; then :
+ enableval=$enable_manual;
+ if test "x$enableval" = "xyes"; then
+ build_manual=yes;
+ else
+ build_manual=no;
+ fi
+
+fi
+
+
+
+ if test "x$build_parsers" = "xyes"; then
+ BUILD_PARSERS_TRUE=
+ BUILD_PARSERS_FALSE='#'
+else
+ BUILD_PARSERS_TRUE='#'
+ BUILD_PARSERS_FALSE=
+fi
+
+
+ if test "x$build_manual" = "xyes"; then
+ BUILD_MANUAL_TRUE=
+ BUILD_MANUAL_FALSE='#'
+else
+ BUILD_MANUAL_TRUE='#'
+ BUILD_MANUAL_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok `-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+ if test -n "$CCC"; then
+ CXX=$CCC
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CXX" && break
+done
+
+ if test "x$ac_ct_CXX" = x; then
+ CXX="g++"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CXX=$ac_ct_CXX
+ fi
+fi
+
+ fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GXX=yes
+else
+ GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+ ac_cxx_werror_flag=yes
+ ac_cv_prog_cxx_g=no
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+else
+ CXXFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CXX" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CXX_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok `-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CXX_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+ am__fastdepCXX_TRUE=
+ am__fastdepCXX_FALSE='#'
+else
+ am__fastdepCXX_TRUE='#'
+ am__fastdepCXX_FALSE=
+fi
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_AR="ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_AR" = x; then
+ AR=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+else
+ AR="$ac_cv_prog_AR"
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+# Checks to carry out if we are building parsers.
+if test "x$build_parsers" = "xyes"; then
+
+# Extract the first word of "ragel", so it can be a program name with args.
+set dummy ragel; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RAGEL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RAGEL"; then
+ ac_cv_prog_RAGEL="$RAGEL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RAGEL="ragel"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RAGEL=$ac_cv_prog_RAGEL
+if test -n "$RAGEL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RAGEL" >&5
+$as_echo "$RAGEL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -z "$RAGEL"; then
+ echo
+ echo "error: ragel is required to build the parsers"
+ echo
+ exit 1
+fi
+
+# Extract the first word of "kelbt", so it can be a program name with args.
+set dummy kelbt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_KELBT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$KELBT"; then
+ ac_cv_prog_KELBT="$KELBT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_KELBT="kelbt"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+KELBT=$ac_cv_prog_KELBT
+if test -n "$KELBT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $KELBT" >&5
+$as_echo "$KELBT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -z "$KELBT"; then
+ echo
+ echo "error: kelbt is required to build the parsers"
+ echo
+ exit 1
+fi
+
+fi
+
+# Checks to carry out if we are building the manual.
+if test "x$build_manual" = "xyes"; then
+
+# Extract the first word of "fig2dev", so it can be a program name with args.
+set dummy fig2dev; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_FIG2DEV+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$FIG2DEV"; then
+ ac_cv_prog_FIG2DEV="$FIG2DEV" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_FIG2DEV="fig2dev"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+FIG2DEV=$ac_cv_prog_FIG2DEV
+if test -n "$FIG2DEV"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FIG2DEV" >&5
+$as_echo "$FIG2DEV" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -z "$FIG2DEV"; then
+ echo
+ echo "error: fig2dev is required to build the manual (maybe use --disable-manual)"
+ echo
+ exit 1
+fi
+
+# Extract the first word of "pdflatex", so it can be a program name with args.
+set dummy pdflatex; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_PDFLATEX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$PDFLATEX"; then
+ ac_cv_prog_PDFLATEX="$PDFLATEX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_PDFLATEX="pdflatex"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+PDFLATEX=$ac_cv_prog_PDFLATEX
+if test -n "$PDFLATEX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PDFLATEX" >&5
+$as_echo "$PDFLATEX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -z "$PDFLATEX"; then
+ echo
+ echo "error: pdflatex is required to build the manual (maybe use --disable-manual)"
+ echo
+ exit 1
+fi
+
+fi
+
+# Extract the first word of "gdc", so it can be a program name with args.
+set dummy gdc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GDC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$GDC"; then
+ ac_cv_prog_GDC="$GDC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_GDC="gdc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+GDC=$ac_cv_prog_GDC
+if test -n "$GDC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GDC" >&5
+$as_echo "$GDC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the Objective-C compiler" >&5
+$as_echo_n "checking for the Objective-C compiler... " >&6; }
+cat > conftest.m <<EOF
+int main() { return 0; }
+EOF
+GOBJC=""
+if gcc -x objective-c conftest.m -o conftest.bin 2>/dev/null; then
+ GOBJC="gcc -x objective-c"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "javac", so it can be a program name with args.
+set dummy javac; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_JAVAC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$JAVAC"; then
+ ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_JAVAC="javac"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+JAVAC=$ac_cv_prog_JAVAC
+if test -n "$JAVAC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5
+$as_echo "$JAVAC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+# Extract the first word of "txl", so it can be a program name with args.
+set dummy txl; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_TXL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$TXL"; then
+ ac_cv_prog_TXL="$TXL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_TXL="txl"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+TXL=$ac_cv_prog_TXL
+if test -n "$TXL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TXL" >&5
+$as_echo "$TXL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+# Extract the first word of "ruby", so it can be a program name with args.
+set dummy ruby; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RUBY+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RUBY"; then
+ ac_cv_prog_RUBY="$RUBY" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_RUBY="ruby"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RUBY=$ac_cv_prog_RUBY
+if test -n "$RUBY"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY" >&5
+$as_echo "$RUBY" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+# Extract the first word of "gmcs", so it can be a program name with args.
+set dummy gmcs; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GMCS+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$GMCS"; then
+ ac_cv_prog_GMCS="$GMCS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_GMCS="gmcs"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+GMCS=$ac_cv_prog_GMCS
+if test -n "$GMCS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMCS" >&5
+$as_echo "$GMCS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+# Extract the first word of "go", so it can be a program name with args.
+set dummy go; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GOBIN+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$GOBIN"; then
+ ac_cv_prog_GOBIN="$GOBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_GOBIN="go build"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+GOBIN=$ac_cv_prog_GOBIN
+if test -n "$GOBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GOBIN" >&5
+$as_echo "$GOBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ac_config_files="$ac_config_files Makefile ragel/Makefile aapl/Makefile doc/Makefile doc/ragel.1 contrib/Makefile test/Makefile test/runtests examples/Makefile"
+
+ac_config_commands="$ac_config_commands default"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${BUILD_PARSERS_TRUE}" && test -z "${BUILD_PARSERS_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_PARSERS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_MANUAL_TRUE}" && test -z "${BUILD_MANUAL_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_MANUAL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by ragel $as_me 6.8, which was
+generated by GNU Autoconf 2.68. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to the package provider."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+ragel config.status 6.8
+configured by $0, generated by GNU Autoconf 2.68,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "ragel/config.h") CONFIG_HEADERS="$CONFIG_HEADERS ragel/config.h" ;;
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "ragel/Makefile") CONFIG_FILES="$CONFIG_FILES ragel/Makefile" ;;
+ "aapl/Makefile") CONFIG_FILES="$CONFIG_FILES aapl/Makefile" ;;
+ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "doc/ragel.1") CONFIG_FILES="$CONFIG_FILES doc/ragel.1" ;;
+ "contrib/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/Makefile" ;;
+ "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
+ "test/runtests") CONFIG_FILES="$CONFIG_FILES test/runtests" ;;
+ "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+ "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_tt"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+ } >"$ac_tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$ac_tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
+ fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$_am_arg" : 'X\(//\)[^/]' \| \
+ X"$_am_arg" : 'X\(//\)$' \| \
+ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir=$dirpart/$fdir; as_fn_mkdir_p
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+ ;;
+ "default":C) chmod +x test/runtests
+ ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+echo "configuration of ragel complete"
diff --git a/configure.in b/configure.in
index e00e89c..4ef153d 100644
--- a/configure.in
+++ b/configure.in
@@ -18,8 +18,8 @@ dnl You should have received a copy of the GNU General Public License
dnl along with Ragel; if not, write to the Free Software
dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-AC_INIT(ragel, 6.6)
-PUBDATE="Dec 2009"
+AC_INIT(ragel, 6.8)
+PUBDATE="Feb 2013"
AM_INIT_AUTOMAKE([foreign])
AC_SUBST(PUBDATE)
@@ -31,6 +31,21 @@ AC_CHECK_FILES( $srcdir/DIST,
[ . $srcdir/DIST; ],
[ build_parsers=yes; build_manual=yes; ] )
+dnl
+dnl Enable arg to explicitly control the building of the manual
+dnl
+AC_ARG_ENABLE(manual,
+ [ --enable-manual do we want to build the manual?],
+ [
+ if test "x$enableval" = "xyes"; then
+ build_manual=yes;
+ else
+ build_manual=no;
+ fi
+ ],
+)
+
+
dnl Set to true if the build system should generate parsers from ragel and kelbt
dnl sources. Set to false if generated files are included and not to be built
dnl (production).
@@ -45,9 +60,6 @@ AC_PROG_CXX
AC_CHECK_TOOL(AR, ar)
AC_PROG_RANLIB
-# Default flags.
-CXXFLAGS="-g"
-
dnl Set test on c++ compiler.
AC_LANG_CPLUSPLUS
@@ -81,7 +93,7 @@ if test "x$build_manual" = "xyes"; then
AC_CHECK_PROG(FIG2DEV, fig2dev, fig2dev)
if test -z "$FIG2DEV"; then
echo
- echo "error: fig2dev is required to build the manual"
+ echo "error: fig2dev is required to build the manual (maybe use --disable-manual)"
echo
exit 1
fi
@@ -89,7 +101,7 @@ fi
AC_CHECK_PROG(PDFLATEX, pdflatex, pdflatex)
if test -z "$PDFLATEX"; then
echo
- echo "error: pdflatex is required to build the manual"
+ echo "error: pdflatex is required to build the manual (maybe use --disable-manual)"
echo
exit 1
fi
@@ -125,6 +137,9 @@ AC_CHECK_PROG(RUBY, ruby, ruby)
dnl Check for the C# compiler.
AC_CHECK_PROG(GMCS, gmcs, gmcs)
+dnl Check for the Go compiler.
+AC_CHECK_PROG(GOBIN, go, go build)
+
dnl write output files
AC_OUTPUT(
[
diff --git a/contrib/Makefile.in b/contrib/Makefile.in
new file mode 100644
index 0000000..f634174
--- /dev/null
+++ b/contrib/Makefile.in
@@ -0,0 +1,334 @@
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = contrib
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/ragel/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+FIG2DEV = @FIG2DEV@
+GDC = @GDC@
+GMCS = @GMCS@
+GOBIN = @GOBIN@
+GOBJC = @GOBJC@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAC = @JAVAC@
+KELBT = @KELBT@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PDFLATEX = @PDFLATEX@
+PUBDATE = @PUBDATE@
+RAGEL = @RAGEL@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TXL = @TXL@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = ragel.make ragel.m4 unicode2ragel.rb
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign contrib/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign contrib/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+ distclean-generic distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/contrib/ragel.m4 b/contrib/ragel.m4
index c5cb9e9..72ce4b9 100644
--- a/contrib/ragel.m4
+++ b/contrib/ragel.m4
@@ -20,12 +20,22 @@ AC_DEFUN([CHECK_RAGEL], [
dnl We set RAGEL to false so that it would execute the "false"
dnl command if needed.
- AS_IF([test x"$RAGEL" = x"no"], [RAGEL=false])
+ AS_IF([test x"$RAGEL" = x"no"],
+ [RAGEL=false],
+ AS_IF([test x"$2" != "x"],
+ [ragel_version=`$RAGEL --version | sed -n -e '1s:.*version \(@<:@0-9@:>@\.@<:@0-9@:>@\) .*:\1:p'`
+ ragel_version_compare=`echo $ragel_version | tr -d .`
+ ragel_wanted_version=`echo $2 | tr -d .`
+ AS_IF([test $ragel_version_compare -lt $ragel_wanted_version],
+ [AC_MSG_WARN([Found Ragel $ragel_version but Ragel $2 requested])
+ RAGEL=false
+ ])
+ ]))
dnl Only test the need if not found
AS_IF([test x"$RAGEL" = x"false"], [
AC_MSG_CHECKING([whether we need ragel to regenerate sources])
- AS_IF([test -a ${srcdir}/$1], [ragel_needed=no], [ragel_needed=yes])
+ AS_IF([test -a "${srcdir}/$1"], [ragel_needed=no], [ragel_needed=yes])
AC_MSG_RESULT([$ragel_needed])
AS_IF([test x"$ragel_needed" = x"yes"],
@@ -37,7 +47,7 @@ You can find Ragel at http://www.complang.org/ragel/dnl
])
AC_DEFUN([CHECK_RAGEL_AM], [
- CHECK_RAGEL([$1])
+ CHECK_RAGEL([$1], [$2])
AM_CONDITIONAL([HAVE_RAGEL], [test x"$RAGEL" != x"false"])
])
diff --git a/depcomp b/depcomp
new file mode 100755
index 0000000..bd0ac08
--- /dev/null
+++ b/depcomp
@@ -0,0 +1,688 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2011-12-04.11; # UTC
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
+# 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 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 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 to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+ depmode Dependency tracking mode.
+ source Source file read by `PROGRAMS ARGS'.
+ object Object file output by `PROGRAMS ARGS'.
+ DEPDIR directory where to store dependencies.
+ depfile Dependency file to output.
+ tmpdepfile Temporary file to use when outputting dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit $?
+ ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+ # This is just like msvisualcpp but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+ # This is just like msvc7 but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvc7
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am. Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+ for arg
+ do
+ case $arg in
+ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+ *) set fnord "$@" "$arg" ;;
+ esac
+ shift # fnord
+ shift # $arg
+ done
+ "$@"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+ tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'. On the theory
+## that the space means something, we add a space to the output as
+## well. hp depmode also adds that space, but also prefixes the VPATH
+## to the object. Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like `#:fec' to the end of the
+ # dependency line.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+ tr '
+' ' ' >> "$depfile"
+ echo >> "$depfile"
+
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. In older versions, this file always lives in the
+ # current directory. Also, the AIX compiler puts `$object:' at the
+ # start of each line; $object doesn't have directory information.
+ # Version 6 uses the directory in both cases.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$base.u
+ tmpdepfile3=$dir.libs/$base.u
+ "$@" -Wc,-M
+ else
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$dir$base.u
+ tmpdepfile3=$dir$base.u
+ "$@" -M
+ fi
+ stat=$?
+
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ # Each line is of the form `foo.o: dependent.h'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ # That's a tab and a space in the [].
+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+icc)
+ # Intel's C compiler understands `-MD -MF file'. However on
+ # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+ # ICC 7.0 will fill foo.d with something like
+ # foo.o: sub/foo.c
+ # foo.o: sub/foo.h
+ # which is wrong. We want:
+ # sub/foo.o: sub/foo.c
+ # sub/foo.o: sub/foo.h
+ # sub/foo.c:
+ # sub/foo.h:
+ # ICC 7.1 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using \ :
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each line is of the form `foo.o: dependent.h',
+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+ sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp2)
+ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+ # compilers, which have integrated preprocessors. The correct option
+ # to use with these is +Maked; it writes dependencies to a file named
+ # 'foo.d', which lands next to the object file, wherever that
+ # happens to be.
+ # Much of this is similar to the tru64 case; see comments there.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir.libs/$base.d
+ "$@" -Wc,+Maked
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ "$@" +Maked
+ fi
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+ # Add `dependent.h:' lines.
+ sed -ne '2,${
+ s/^ *//
+ s/ \\*$//
+ s/$/:/
+ p
+ }' "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile" "$tmpdepfile2"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in `foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+ if test "$libtool" = yes; then
+ # With Tru64 cc, shared objects can also be used to make a
+ # static library. This mechanism is used in libtool 1.4 series to
+ # handle both shared and static libraries in a single compilation.
+ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+ #
+ # With libtool 1.5 this exception was removed, and libtool now
+ # generates 2 separate objects for the 2 libraries. These two
+ # compilations output dependencies in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+ # automatically cleaned when .libs/ is deleted, while ignoring
+ # the former would cause a distcleancheck panic.
+ tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
+ tmpdepfile2=$dir$base.o.d # libtool 1.5
+ tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
+ tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1=$dir$base.o.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ tmpdepfile4=$dir$base.d
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ # That's a tab and a space in the [].
+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+msvc7)
+ if test "$libtool" = yes; then
+ showIncludes=-Wc,-showIncludes
+ else
+ showIncludes=-showIncludes
+ fi
+ "$@" $showIncludes > "$tmpdepfile"
+ stat=$?
+ grep -v '^Note: including file: ' "$tmpdepfile"
+ if test "$stat" = 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The first sed program below extracts the file names and escapes
+ # backslashes for cygpath. The second sed program outputs the file
+ # name when reading, but also accumulates all include files in the
+ # hold buffer in order to output them again at the end. This only
+ # works with sed implementations that can handle large buffers.
+ sed < "$tmpdepfile" -n '
+/^Note: including file: *\(.*\)/ {
+ s//\1/
+ s/\\/\\\\/g
+ p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/ \1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+ s/.*/ /
+ G
+ p
+}' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvc7msys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove `-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ # Require at least two characters before searching for `:'
+ # in the target name. This is to cope with DOS-style filenames:
+ # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+ "$@" $dashmflag |
+ sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # Remove any Libtool call
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+ cleared=no eat=no
+ for arg
+ do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ if test $eat = yes; then
+ eat=no
+ continue
+ fi
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ # Strip any option that makedepend may not understand. Remove
+ # the object too, otherwise makedepend will parse it as a source file.
+ -arch)
+ eat=yes ;;
+ -*|$object)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix=`echo "$object" | sed 's/^.*\././'`
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ # makedepend may prepend the VPATH from the source file name to the object.
+ # No need to regex-escape $object, excess matching of '.' is harmless.
+ sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+ sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove `-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E |
+ sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+ sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E 2>/dev/null |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
+ echo " " >> "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvcmsys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 1cbc742..3aa7aae 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -20,8 +20,6 @@
man_MANS = ragel.1
-dist_doc_DATA = ragel-guide.pdf
-
EXTRA_DIST = ragel-guide.tex \
bmconcat.fig bmregex.fig dropdown.fig exdoneact.fig \
exoutact1.fig exstrongsubtr.fig lines2.fig smallscanner.fig bmnull.fig \
@@ -34,6 +32,8 @@ EXTRA_DIST = ragel-guide.tex \
if BUILD_MANUAL
+dist_doc_DATA = ragel-guide.pdf
+
.fig.pdf:
fig2dev -L pdf $< $@
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644
index 0000000..9a7e41b
--- /dev/null
+++ b/doc/Makefile.in
@@ -0,0 +1,500 @@
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# Copyright 2001-2007 Adrian Thurston <thurston@complang.org>
+#
+
+# This file is part of Ragel.
+#
+# Ragel is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Ragel 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 Ragel; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = doc
+DIST_COMMON = $(am__dist_doc_DATA_DIST) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/ragel.1.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/ragel/config.h
+CONFIG_CLEAN_FILES = ragel.1
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(docdir)"
+NROFF = nroff
+MANS = $(man_MANS)
+am__dist_doc_DATA_DIST = ragel-guide.pdf
+DATA = $(dist_doc_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+FIG2DEV = @FIG2DEV@
+GDC = @GDC@
+GMCS = @GMCS@
+GOBIN = @GOBIN@
+GOBJC = @GOBJC@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAC = @JAVAC@
+KELBT = @KELBT@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PDFLATEX = @PDFLATEX@
+PUBDATE = @PUBDATE@
+RAGEL = @RAGEL@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TXL = @TXL@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = ragel.1
+EXTRA_DIST = ragel-guide.tex \
+ bmconcat.fig bmregex.fig dropdown.fig exdoneact.fig \
+ exoutact1.fig exstrongsubtr.fig lines2.fig smallscanner.fig bmnull.fig \
+ comments1.fig entryguard.fig exinter.fig exoutact2.fig exsubtr.fig \
+ lmkleene.fig stembed.fig bmnum.fig comments2.fig exaction.fig \
+ exnegate.fig explus.fig finguard.fig opconcat.fig bmor.fig conds1.fig \
+ exallact.fig exoption.fig exstact.fig leftguard.fig opor.fig \
+ bmrange.fig conds2.fig exconcat.fig exor.fig exstar.fig lines1.fig \
+ opstar.fig
+
+@BUILD_MANUAL_TRUE@dist_doc_DATA = ragel-guide.pdf
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .fig .pdf .tex
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+ragel.1: $(top_builddir)/config.status $(srcdir)/ragel.1.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ { for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-dist_docDATA: $(dist_doc_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)"
+ @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \
+ done
+
+uninstall-dist_docDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir)
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @list='$(MANS)'; if test -n "$$list"; then \
+ list=`for p in $$list; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
+ if test -n "$$list" && \
+ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
+ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
+ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \
+ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \
+ echo " typically \`make maintainer-clean' will remove them" >&2; \
+ exit 1; \
+ else :; fi; \
+ else :; fi
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS) $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(docdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_docDATA install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_docDATA uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+ distclean-generic distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am \
+ install-dist_docDATA install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-man1 install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am uninstall uninstall-am uninstall-dist_docDATA \
+ uninstall-man uninstall-man1
+
+
+@BUILD_MANUAL_TRUE@.fig.pdf:
+@BUILD_MANUAL_TRUE@ fig2dev -L pdf $< $@
+
+@BUILD_MANUAL_TRUE@.tex.pdf:
+@BUILD_MANUAL_TRUE@ pdflatex -interaction=nonstopmode $< >/dev/null
+@BUILD_MANUAL_TRUE@ pdflatex -interaction=nonstopmode $< >/dev/null
+@BUILD_MANUAL_TRUE@ pdflatex -interaction=nonstopmode $< >/dev/null
+
+@BUILD_MANUAL_TRUE@version.tex: Makefile
+@BUILD_MANUAL_TRUE@ echo '|def|version{$(PACKAGE_VERSION)}' | tr '|' '\\' > version.tex
+@BUILD_MANUAL_TRUE@ echo '|def|pubdate{$(PUBDATE)}' | tr '|' '\\' >> version.tex
+
+@BUILD_MANUAL_TRUE@ragel-guide.pdf: version.tex
+
+@BUILD_MANUAL_TRUE@ragel-guide.pdf: bmconcat.pdf bmregex.pdf dropdown.pdf exdoneact.pdf \
+@BUILD_MANUAL_TRUE@ exoutact1.pdf exstrongsubtr.pdf lines2.pdf smallscanner.pdf bmnull.pdf \
+@BUILD_MANUAL_TRUE@ comments1.pdf entryguard.pdf exinter.pdf exoutact2.pdf exsubtr.pdf \
+@BUILD_MANUAL_TRUE@ lmkleene.pdf stembed.pdf bmnum.pdf comments2.pdf exaction.pdf \
+@BUILD_MANUAL_TRUE@ exnegate.pdf explus.pdf finguard.pdf opconcat.pdf bmor.pdf conds1.pdf \
+@BUILD_MANUAL_TRUE@ exallact.pdf exoption.pdf exstact.pdf leftguard.pdf opor.pdf \
+@BUILD_MANUAL_TRUE@ bmrange.pdf conds2.pdf exconcat.pdf exor.pdf exstar.pdf lines1.pdf \
+@BUILD_MANUAL_TRUE@ opstar.pdf
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/RELEASE_NOTES_V2 b/doc/RELEASE_NOTES_V2
deleted file mode 100644
index 1d03eda..0000000
--- a/doc/RELEASE_NOTES_V2
+++ /dev/null
@@ -1,86 +0,0 @@
- Porting Ragel Programs to Version 2
- ===================================
-
-
-1. Move all ?, +, and * operators to the right hand side of the operand.
-
- float = *digit ?('.' +digit);
-
- float = digit* ('.' digit+)?;
-
-2. Change all assignments to main from a definition using the = operator to an
-instantiation using the := operator.
-
- main = 'hello';
-
- main := 'hello';
-
-3. Remove $0 %! operations for clearing priorities.
-
-4. Anywhere implicit default priorities of zero are used to interact with
-explicitly set non-zero transitions, set the priorities to zero explicitly.
-
- main := any* 'FIN' :1;
-
- main := ( any $0 )* 'FIN' :1;
-
-5. If priorities need to interact across different machines, use a common name.
-Note that priority names default to the name of the machine they are assigned
-to.
-
- wild = any*;
- main := wild 'FIN' :1;
-
- wild = ( any $0 )*;
- main := wild 'FIN' :wild,1;
-
-6. If using clear keyword or operators modified with ^, duplicate the operand
-machines and rewrite them such that the cleared actions and suppressed out
-transitions and out priorities are removed.
-
-7. Change func keyword to action.
-
-8. Escape any - symbols and initial ^ symbol in or literals ([] outside of
-regular expressions).
-
- main := [^#$-+*];
-
- main := [\^#$\-+*];
-
-9. In C output, lowercase init, execute and finish routines and put an
-underscore in between the fsm name and the function name. Also qualify
-references to the fsm structure with the struct keyword.
-
- fsm f;
- fsmInit( &f );
- fsmExecute( &f, buf, len );
- fsmFinish( &f );
-
- struct fsm f;
- fsm_init( &f );
- fsm_execute( &f, buf, len );
- fsm_finish( &f );
-
-10. In C++ output, lowercase the init, execute and finish routines. Also make
-sure that the init routine is explicitly called.
-
- fsm f;
- f.Init();
- f.Execute( buf, len );
- f.Finish();
-
- fsm f;
- f.init();
- f.execute( buf, len );
- f.finish();
-
-11. Remove calls to the accept routine, instead examine the return value of the
-finish routine. If the machine does not accept then finish returns -1 or 0, if
-the machine accepts then finish returns 1.
-
- f.finish();
- if ( f.accept() )
- cout << "ACCEPT" << endl;
-
- if ( f.finish() > 0 )
- cout << "ACCEPT" << endl;
diff --git a/doc/RELEASE_NOTES_V3 b/doc/RELEASE_NOTES_V3
deleted file mode 100644
index 64dd2f1..0000000
--- a/doc/RELEASE_NOTES_V3
+++ /dev/null
@@ -1,8 +0,0 @@
- Porting Ragel Version 2 Programs to Version 3
- =============================================
-
-1. Replace all instances of *p in action code with the keyword fc.
-
-2. Replace all instances of : used to set actions or priorities with @.
-
-3. Wrap named priorities in parentheses so they are of the form @(name,1).
diff --git a/doc/RELEASE_NOTES_V4 b/doc/RELEASE_NOTES_V4
deleted file mode 100644
index a142f36..0000000
--- a/doc/RELEASE_NOTES_V4
+++ /dev/null
@@ -1,361 +0,0 @@
-
- RELEASE NOTES Ragel 4.X
-
-
-To-State and From-State Action Embedding Operators Added (4.2)
-==============================================================
-
-Added operators for embedding actions into all transitions into a state and all
-transitions out of a state. These embeddings stay with the state, and are
-irrespective of what the current transitions are and any future transitions
-that may be added into or out of the state.
-
-In the following example act is executed on the transitions for 't' and 'y'.
-Even though it is only embedded in the context of the first alternative. This
-is because after matching 'hi ', the machine has not yet distinguished beween
-the two threads. The machine is simultaneously in the state expecting 'there'
-and the state expecting 'you'.
-
- action act {}
- main :=
- 'hi ' %*act 'there' |
- 'hi you';
-
-The to-state action embedding operators embed into transitions that go into:
->~ the start state
-$~ all states
-%~ final states
-<~ states that are not the start
-@~ states that are not final
-<@~ states that are not the start AND not final
-
-The from-state action embedding operators embed into transitions that leave:
->* the start state
-$* all states
-%* final states
-<* states that are not the start
-@* states that are not final
-<@* states that are not the start AND not final
-
-Changed Operators for Embedding Context/Actions Into States (4.2)
-=================================================================
-
-The operators used to embed context and actions into states have been modified.
-The purpose of the modification is to make it easier to distribute actions to
-take among the states in a chain of concatenations such that each state has
-only a single action embedded. An example follows below.
-
-Now Gone:
-
-1. The use of >@ for selecting the states to modfiy (as in >@/ to embed eof
- actions, etc) has been removed. This prefix meant start state OR not start AND
- not final.
-
-2. The use of @% for selecting states to modify (as in @%/ to embed eof
- actions, etc) has been removed. This prefix previously meant not start AND not
- final OR final.
-
-Now Added:
-
-1. The prefix < which means not start.
-2. The prefix @ which means not final.
-3. The prefix <@ which means not start & not final"
-
-The new matrix of operators used to embed into states is:
-
->: $: %: <: @: <@: - context
->~ $~ %~ <~ @~ <@~ - to state action
->* $* %* <* @* <@* - from state action
->/ $/ %/ </ @/ <@/ - eof action
->! $! %! <! @! <@! - error action
->^ $^ %^ <^ @^ <@^ - local error action
-
-| | | | | |
-| | | | | *- not start & not final
-| | | | |
-| | | | *- not final
-| | | |
-| | | *- not start
-| | |
-| | *- final
-| |
-| *- all states
-|
-*- start state
-
-This example shows one way to use the new operators to cover all the states
-with a single action. The embedding of eof2 covers all the states in m2. The
-embeddings of eof1 and eof3 avoid the boundaries that m1 and m3 both share with
-m2.
-
- action eof1 {}
- action eof2 {}
- action eof3 {}
- m1 = 'm1';
- m2 = ' '+;
- m3 = 'm3';
-
- main := m1 @/eof1 . m2 $/eof2 . m3 </eof3;
-
-Verbose Action, Priority and Context Embedding Added (4.2)
-==========================================================
-
-As an alternative to the symbol-based action, priority and context embedding
-operators, a more verbose form of embedding has been added. The general form of
-the verbose embedding is:
-
- machine <- location [modifier] embedding_type value
-
-For embeddings into transitions, the possible locations are:
- enter -- entering transitions
- all -- all transitions
- finish -- transitions into a final state
- leave -- pending transitions out of the final states
-
-For embeddings into states, the possible locations are:
- start -- the start state
- all -- all states
- final -- final states
- !start -- all states except the start
- !final -- states that are not final
- !start !final -- states that are not the start and not final
-
-The embedding types are:
- exec -- an action into transitions
- pri -- a priority into transitions
- ctx -- a named context into a state
- into -- an action into all transitions into a state
- from -- an action into all transitions out of a state
- err -- an error action into a state
- lerr -- a local error action into a state
-
-The possible modfiers:
- on name -- specify a name for priority and local error embedding
-
-Character-Level Negation '^' Added (4.1)
-========================================
-
-A character-level negation operator ^ was added. This operator has the same
-precedence level as !. It is used to match single characters that are not
-matched by the machine it operates on. The expression ^m is equivalent to
-(any-(m)). This machine makes sense only when applied to machines that match
-single characters. Since subtraction is essentially a set difference, any
-strings matched by m that are not of length 1 will be ignored by the
-subtraction and have no effect.
-
-Discontinued Plus Sign To Specifify Positive Literal Numbers (4.1)
-==================================================================
-
-The use of + to specify a literal number as positive has been removed. This
-notation is redundant because all literals are positive by default. It was
-unlikely to be used but was provided for consistency. This notation caused an
-ambiguity with the '+' repetition operator. Due to this ambibuity, and the fact
-that it is unlikely to be used and is completely unnecessary when it is, it has
-been removed. This simplifies the design. It elimnates possible confusion and
-removes the need to explain why the ambiguity exists and how it is resolved.
-
-As a consequence of the removal, any expression (m +1) or (m+1) will now be
-parsed as (m+ . 1) rather then (m . +1). This is because previously the scanner
-handled positive literals and therefore they got precedence over the repetition
-operator.
-
-Precedence of Subtraction Operator vs Negative Literals Changed (4.1)
-=====================================================================
-
-Previously, the scanner located negative numbers and therefore gave a higher
-priority to the use of - to specify a negative literal number. This has
-changed, precedence is now given to the subtraction operator.
-
-This change is for two reasons: A) The subtraction operator is far more common
-than negative literal numbers. I have quite often been fooled by writing
-(any-0) and having it parsed as ( any . -0 ) rather than ( any - 0 ) as I
-wanted. B) In the definition of concatentation I want to maintain that
-concatenation is used only when there are no other binary operators separating
-two machines. In the case of (any-0) there is an operator separating the
-machines and parsing this as the concatenation of (any . -0) violates this
-rule.
-
-Duplicate Actions are Removed From Action Lists (4.1)
-=====================================================
-
-With previous versions of Ragel, effort was often expended towards ensuring
-identical machines were not uniononed together, causing duplicate actions to
-appear in the same action list (transition or eof perhaps). Often this required
-factoring out a machine or specializing a machine's purpose. For example,
-consider the following machine:
-
- word = [a-z]+ >s $a %l;
- main :=
- ( word ' ' word ) |
- ( word '\t' word );
-
-This machine needed to be rewritten as the following to avoid duplicate
-actions. This is essentially a refactoring of the machine.
-
- main := word ( ' ' | '\t' ) word;
-
-An alternative was to specialize the machines:
-
- word1 = [a-z]+ >s $a %l;
- word2 = [a-z]+;
- main :=
- ( word1 ' ' word1 ) |
- ( word2 '\t' word1 );
-
-Since duplicating an action on a transition is never (in my experience) desired
-and must be manually avoided, sometimes to the point of obscuring the machine
-specification, it is now done automatically by Ragel. This change should have
-no effect on existing code that is properly written and will allow the
-programmer more freedom when writing new code.
-
-New Frontend (4.0)
-==================
-
-The syntax for embedding Ragel statements into the host language has changed.
-The primary motivation is a better interaction with Objective-C. Under the
-previous scheme Ragel generated the opening and closing of the structure and
-the interface. The user could inject user defined declarations into the struct
-using the struct {}; statement, however there was no way to inject interface
-declarations. Under this scheme it was also awkward to give the machine a base
-class. Rather then add another statement similar to struct for including
-declarations in the interface we take the reverse approach, the user now writes
-the struct and interface and Ragel statements are injected as needed.
-
-Machine specifications now begin with %% and are followed with an optional name
-and either a single ragel statement or a sequence of statements enclosed in {}.
-If a machine specification does not have a name then Ragel tries to find a name
-for it by first checking if the specification is inside a struct or class or
-interface. If it is not then it uses the name of the previous machine
-specification. If still no name is found then an error is raised.
-
-Since the user now specifies the fsm struct directly and since the current
-state and stack variables are now of type integer in all code styles, it is
-more appropriate for the user to manage the declarations of these variables.
-Ragel no longer generates the current state and the stack data variables. This
-also gives the user more freedom in deciding how the stack is to be allocated,
-and also permits it to be grown as necessary, rather than allowing only a fixed
-stack size.
-
-FSM specifications now persist in memory, so the second time a specification of
-any particular name is seen the statements will be added to the previous
-specification. Due to this it is no longer necessary to give the element or
-alphabet type in the header portion and in the code portion. In addition there
-is now an include statement that allows the inclusion of the header portion of
-a machine it it resides in a different file, as well as allowing the inclusion
-of a machine spec of a different name from the any file at all.
-
-Ragel is still able to generate the machine's function declarations. This may
-not be required for C code, however this will be necessary for C++ and
-Objective-C code. This is now accomplished with the interface statement.
-
-Ragel now has different criteria for deciding what to generate. If the spec
-contains the interface statement then the machine's interface is generated. If
-the spec contains the definition of a main machine, then the code is generated.
-It is now possible to put common machine definitions into a separate library
-file and to include them in other machine specifications.
-
-To port Ragel 3.x programs to 4.x, the FSM's structure must be explicitly coded
-in the host language and it must include the declaration of current state. This
-should be called 'curs' and be of type int. If the machine uses the fcall
-and fret directives, the structure must also include the stack variables. The
-stack should be named 'stack' and be of type int*. The stack top should be
-named 'top' and be of type int.
-
-In Objective-C, the both the interface and implementation directives must also
-be explicitly coded by the user. Examples can be found in the section "New
-Interface Examples".
-
-Action and Priority Embedding Operators (4.0)
-=============================================
-
-In the interest of simplifying the language, operators now embed strictly
-either on characters or on EOF, but never both. Operators should be doing one
-well-defined thing, rather than have multiple effects. This also enables the
-detection of FSM commands that do not make sense in EOF actions.
-
-This change is summarized by:
- -'%' operator embeds only into leaving characters.
- -All global and local error operators only embed on error character
- transitions, their action will not be triggerend on EOF in non-final states.
- -Addition of EOF action embedding operators for all classes of states to make
- up for functionality removed from other operators. These are >/ $/ @/ %/.
- -Start transition operator '>' does not imply leaving transtions when start
- state is final.
-
-This change results in a simpler and more direct relationship between the
-operators and the physical state machine entities they operate on. It removes
-the special cases within the operators that require you to stop and think as
-you program in Ragel.
-
-Previously, the pending out transition operator % simultaneously served two
-purposes. First, to embed actions to that are to get transfered to transitions
-made going out of the machine. These transitions are created by the
-concatentation and kleene star operators. Second, to specify actions that get
-executed on EOF should the final state in the machine to which the operator is
-applied remain final.
-
-To convert Ragel 3.x programs: Any place where there is an embedding of an
-action into pending out transitions using the % operator and the final states
-remain final in the end result machine, add an embedding of the same action
-using the EOF operator %/action.
-
-Also note that when generating dot file output of a specific component of a
-machine that has leaving transitions embedded in the final states, these
-transitions will no longer show up since leaving transtion operator no longer
-causes actions to be moved into the the EOF event when the state they are
-embeeded into becomes a final state of the final machine.
-
-Const Element Type (4.0)
-========================
-
-If the element type has not been defined, the previous behaviour was to default
-to the alphabet type. The element type however is usually not specified as
-const and in most cases the data pointer in the machine's execute function
-should be a const pointer. Therefore ragel now makes the element type default
-to a constant version of the alphabet type. This can always be changed by using
-the element statment. For example 'element char;' will result in a non-const
-data pointer.
-
-New Interface Examples (4.0)
-============================
-
----------- C ----------
-
-struct fsm
-{
- int curs;
-};
-
-%% fsm
-{
- main := 'hello world';
-}
-
---------- C++ ---------
-
-struct fsm
-{
- int curs;
- %% interface;
-};
-
-%% main := 'hello world';
-
------ Objective-C -----
-
-@interface Clang : Object
-{
-@public
- int curs;
-};
-
-%% interface;
-
-@end
-
-@implementation Clang
-
-%% main := 'hello world';
-
-@end
-
diff --git a/doc/RELEASE_NOTES_V5 b/doc/RELEASE_NOTES_V5
deleted file mode 100644
index 15147d8..0000000
--- a/doc/RELEASE_NOTES_V5
+++ /dev/null
@@ -1,112 +0,0 @@
-
- RELEASE NOTES Ragel 5.X
-
-This file describes the changes in Ragel version 5.X that are not backwards
-compatible. For a list of all the changes see the ChangeLog file.
-
-
-Interface to Host Programming Language
-======================================
-
-In version 5.0 there is a new interface to the host programming language.
-There are two major changes: the way Ragel specifications are embedded in the
-host program text, and the way that the host program interfaces with the
-generated code.
-
-Multiline Ragel specifications begin with '%%{' and end with '}%%'. Single line
-specifications start with '%%' and end at the first newline. Machine names are
-given with the machine statement at the very beginning of a machine spec. This
-change was made in order to make the task of separating Ragel code from the
-host code as straightforward as possible. This will ease the addition of more
-supported host languages.
-
-Ragel no longer parses structure and class names in order to infer machine
-names. Parsing structures and clases requires knowledge of the host language
-hardcoded into Ragel. Since Ragel is moving towards language independence, this
-feature has been removed.
-
-If a machine spec does not have a name then the previous spec name is used. If
-there is no previous specification then this is an error.
-
-The second major frontend change in 5.0 is doing away with the init(),
-execute() and finish() routines. Instead of generating these functions Ragel
-now only generates their contents. This scheme is more flexible, allowing the
-user to use a single function to drive the machine or separate out the
-different tasks if desired. It also frees the user from having to build the
-machine around a structure or a class.
-
-An example machine is:
-
---------------------------
-
-%%{
- machine fsm;
- main := 'hello world';
-}%%
-
-%% write data;
-
-int parse( char *p )
-{
- int cs;
- char *pe = p + strlen(p);
- %%{
- write init;
- write exec;
- }%%
- return cs;
-};
-
---------------------------
-
-The generated code expects certain variables to be available. In some cases
-only if the corresponding features are used.
-
- el* p: A pointer to the data to parse.
- el* pe: A pointer to one past the last item.
- int cs: The current state.
- el* tokstart: The beginning of current match of longest match machines.
- el* tokend: The end of the current match.
- int act: The longest match pattern that has been matched.
- int stack[n]: The stack for machine call statements
- int top: The top of the stack for machine call statements
-
-It is possible to specify to Ragel how the generated code should access all the
-variables except p and pe by using the access statement.
-
- access some_pointer->;
- access variable_name_prefix;
-
-The writing statments are:
-
- write data;
- write init;
- write exec;
- write eof;
-
-There are some options available:
-
- write data noerror nofinal noprefix;
- write exec noend
-
- noerror: Do not write the id of the error state.
- nofinal: Do not write the id of the first_final state.
- noprefix: Do not prefix the variable with the name of the machine
- noend: Do not test if the current character has reached pe. This is
- useful if one wishes to break out of the machine using fbreak
- when hitting some marker, such as the null character.
-
-The fexec Action Statement Changed
-==================================
-
-The fexec action statement has been changed to take only the new position to
-move to. This statement is more useful for moving backwards and reparsing input
-than for specifying a whole new buffer entirely and has been shifted to this
-new use. Also, using only a single argument simplifies the parsing of Ragel
-input files and will ease the addition of other host languages.
-
-Context Embedding Has Been Dropped
-==================================
-
-The context embedding operators were not carried over from version 4.X. Though
-interesting, they have not found any real practical use.
diff --git a/doc/RELEASE_NOTES_V6 b/doc/RELEASE_NOTES_V6
deleted file mode 100644
index b08b8a3..0000000
--- a/doc/RELEASE_NOTES_V6
+++ /dev/null
@@ -1,95 +0,0 @@
-
- RELEASE NOTES Ragel 6.X
-
-This file describes the changes in Ragel version 6.X that are not backwards
-compatible. For a list of all the changes see the ChangeLog file.
-
-Leaving Actions in Scanners (new in 6.1)
-========================================
-
-Scanners now ensure that any leaving actions at the end of a pattern are
-executed. They are always executed before the pattern action.
-
-The EOF Event
-=============
-
-There is a new execution variable called "eof". This should be set to pe on the
-execution of the last buffer block. When p == eof the state machine's EOF
-actions are executed. The variable is required only when EOF actions have been
-embedded.
-
-The advantage of this over "write eof" is that EOF actions are now executed in
-the same context as regular actions. They are free to manipulate p, and jump to
-a new portion of the machine to reprocess input. This was not possible with
-"write eof".
-
-The "write eof" directive was consequently removed.
-
-Scanners now use EOF actions to to flush out the last token, if needed. This
-eliminates the need to manually flush the last token.
-
-Semantics of > % and Error Actions
-==================================
-
-Ragel has gone back to the 3.X semantics for >, % and error actions.
-
-Those that have been using Ragel since the 3.X days will remember that the
-entering operator > embedded a leaving action/priority into the start state
-when it was final. The leaving operator % would embed EOF actions when the
-final states stayed final all the way to the end of compilation. Also, error
-actions would embed EOF actions when at the end of compilation the states the
-error actions were embedded into were not final.
-
-The problem before was that EOF actions and regular actions were executed in
-different contexts ("write exec" and "write eof"), and a single action block
-could easily end up in two different functions. This could lead to compile
-errors and other subtle errors. Now that all actions are executed in the same
-context ("write exec") these problems go away. The original semantics has been
-restored.
-
-Backend Automatically Executed
-==============================
-
-The "ragel" program now automatically executes the appropriate backend. If you
-need the intermediate XML format you can use the -x option.
-
-The fbreak Statement
-====================
-
-The fbreak statement now advances p. It is now possible to break out of the
-machine and restart it without having to fix p first. Originally, fbreak did
-not advance p because it was intended to be used to terminate processing.
-Advancing p was more work than necessary in that case. But fbreak turns out to
-be useful for stopping to return a token as well. In this case the failure to
-advance p is an inconvenience.
-
-Guarded Concatenation Operators are Stronger
-============================================
-
-The :> :>> and <: guarded concatenation operators have been strengthened. In
-the previous version of Ragel is was possible for the priority assignments to
-be bypassed via the the zero length string. Running the following examples
-through 5.25 you will see that the a and b actions are executed on a single
-transition, showing the guard fails. This happens because the operators did not
-consider that the middle machine might have a start state that is final. In 6.0
-these cases have been fixed.
-
- (' '@a)* <: 'x'* . ' '@b;
- (' '@a)* :> 'x'? . ' '@b;
- (' '@a)* :>> 'xyz'? . ' '@b;
-
-The tokstart and tokend Variables Renamed
-=========================================
-
-The "tokstart" and "tokend" variables were changed to "ts" and "te". These
-variables get referenced a lot in scanner actions. They should be shorter.
-
-To update your code simply search and replace:
- tokstart => ts
- tokend => te
-
-Options
-=======
-
-The -l option in rlgen-cd was changed to -L because -l is used in the frontend,
-which now must pass options through.
diff --git a/doc/extract.awk b/doc/extract.awk
deleted file mode 100644
index 2874456..0000000
--- a/doc/extract.awk
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/awk
-#
-
-BEGIN {
- in_generate = 0;
- in_verbatim = 0;
- return_val = 1;
-}
-
-/^% GENERATE: *[a-z0-9A-Z_\.\-]+ *$/ && $3 == exname {
- in_generate = 1;
- return_val = 0;
- next;
-}
-
-/^% END GENERATE$/ {
- in_generate = 0;
- next;
-}
-
-in_generate && /\\begin\{verbatim\}/ {
- in_generate = 0;
- in_verbatim = 1;
- next;
-}
-
-in_verbatim && /\\end\{verbatim\}/ {
- in_generate = 1;
- in_verbatim = 0;
- next;
-}
-
-in_generate && /^%/ {
- print substr( $0, 2 );
-}
-
-in_verbatim {
- print $0;
-}
-
-END { exit return_val; }
diff --git a/doc/fixbackbox.awk b/doc/fixbackbox.awk
deleted file mode 100644
index 434fd20..0000000
--- a/doc/fixbackbox.awk
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/awk
-#
-
-NF == 16 && $16 == 5 {
- $7 = 1
- print $0
- next;
-}
-
-{ print $0; }
diff --git a/doc/genfigs.sh b/doc/genfigs.sh
deleted file mode 100755
index 8d52107..0000000
--- a/doc/genfigs.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/bash
-#
-
-input=ragel-guide.tex
-
-for fig; do
- if awk -f extract.awk -vexname=$fig $input > /dev/null; then
- echo generating ${fig}.dot
- opt=`awk -f extract.awk -vexname=$fig $input |
- sed '/^ *OPT:/s/^.*: *//p;d'`
- awk -f extract.awk -vexname=$fig $input > ${fig}.rl
- ../ragel/ragel -V -p ${fig}.rl > ${fig}.dot
- else
- echo "$0: internal error: figure $fig not found in $input" >&2
- exit 1
- fi
-done
-
diff --git a/doc/ragel-guide.pdf b/doc/ragel-guide.pdf
new file mode 100644
index 0000000..707919c
--- /dev/null
+++ b/doc/ragel-guide.pdf
@@ -0,0 +1,9783 @@
+%PDF-1.4
+%
+1 0 obj
+<< /S /GoTo /D (chapter.1) >>
+endobj
+4 0 obj
+(Introduction)
+endobj
+5 0 obj
+<< /S /GoTo /D (section.1.1) >>
+endobj
+8 0 obj
+(Abstract)
+endobj
+9 0 obj
+<< /S /GoTo /D (section.1.2) >>
+endobj
+12 0 obj
+(Motivation)
+endobj
+13 0 obj
+<< /S /GoTo /D (section.1.3) >>
+endobj
+16 0 obj
+(Overview)
+endobj
+17 0 obj
+<< /S /GoTo /D (section.1.4) >>
+endobj
+20 0 obj
+(Related Work)
+endobj
+21 0 obj
+<< /S /GoTo /D (section.1.5) >>
+endobj
+24 0 obj
+(Development Status)
+endobj
+25 0 obj
+<< /S /GoTo /D (chapter.2) >>
+endobj
+28 0 obj
+(Constructing State Machines)
+endobj
+29 0 obj
+<< /S /GoTo /D (section.2.1) >>
+endobj
+32 0 obj
+(Ragel State Machine Specifications)
+endobj
+33 0 obj
+<< /S /GoTo /D (subsection.2.1.1) >>
+endobj
+36 0 obj
+(Naming Ragel Blocks)
+endobj
+37 0 obj
+<< /S /GoTo /D (subsection.2.1.2) >>
+endobj
+40 0 obj
+(Machine Definition)
+endobj
+41 0 obj
+<< /S /GoTo /D (subsection.2.1.3) >>
+endobj
+44 0 obj
+(Machine Instantiation)
+endobj
+45 0 obj
+<< /S /GoTo /D (subsection.2.1.4) >>
+endobj
+48 0 obj
+(Including Ragel Code)
+endobj
+49 0 obj
+<< /S /GoTo /D (subsection.2.1.5) >>
+endobj
+52 0 obj
+(Importing Definitions)
+endobj
+53 0 obj
+<< /S /GoTo /D (section.2.2) >>
+endobj
+56 0 obj
+(Lexical Analysis of a Ragel Block)
+endobj
+57 0 obj
+<< /S /GoTo /D (section.2.3) >>
+endobj
+60 0 obj
+(Basic Machines)
+endobj
+61 0 obj
+<< /S /GoTo /D (section.2.4) >>
+endobj
+64 0 obj
+(Operator Precedence)
+endobj
+65 0 obj
+<< /S /GoTo /D (section.2.5) >>
+endobj
+68 0 obj
+(Regular Language Operators)
+endobj
+69 0 obj
+<< /S /GoTo /D (subsection.2.5.1) >>
+endobj
+72 0 obj
+(Union)
+endobj
+73 0 obj
+<< /S /GoTo /D (subsection.2.5.2) >>
+endobj
+76 0 obj
+(Intersection)
+endobj
+77 0 obj
+<< /S /GoTo /D (subsection.2.5.3) >>
+endobj
+80 0 obj
+(Difference)
+endobj
+81 0 obj
+<< /S /GoTo /D (subsection.2.5.4) >>
+endobj
+84 0 obj
+(Strong Difference)
+endobj
+85 0 obj
+<< /S /GoTo /D (subsection.2.5.5) >>
+endobj
+88 0 obj
+(Concatenation)
+endobj
+89 0 obj
+<< /S /GoTo /D (subsection.2.5.6) >>
+endobj
+92 0 obj
+(Kleene Star)
+endobj
+93 0 obj
+<< /S /GoTo /D (subsection.2.5.7) >>
+endobj
+96 0 obj
+(One Or More Repetition)
+endobj
+97 0 obj
+<< /S /GoTo /D (subsection.2.5.8) >>
+endobj
+100 0 obj
+(Optional)
+endobj
+101 0 obj
+<< /S /GoTo /D (subsection.2.5.9) >>
+endobj
+104 0 obj
+(Repetition)
+endobj
+105 0 obj
+<< /S /GoTo /D (subsection.2.5.10) >>
+endobj
+108 0 obj
+(Negation)
+endobj
+109 0 obj
+<< /S /GoTo /D (subsection.2.5.11) >>
+endobj
+112 0 obj
+(Character-Level Negation)
+endobj
+113 0 obj
+<< /S /GoTo /D (section.2.6) >>
+endobj
+116 0 obj
+(State Machine Minimization)
+endobj
+117 0 obj
+<< /S /GoTo /D (section.2.7) >>
+endobj
+120 0 obj
+(Visualization)
+endobj
+121 0 obj
+<< /S /GoTo /D (chapter.3) >>
+endobj
+124 0 obj
+(User Actions)
+endobj
+125 0 obj
+<< /S /GoTo /D (section.3.1) >>
+endobj
+128 0 obj
+(Embedding Actions)
+endobj
+129 0 obj
+<< /S /GoTo /D (subsection.3.1.1) >>
+endobj
+132 0 obj
+(Entering Action)
+endobj
+133 0 obj
+<< /S /GoTo /D (subsection.3.1.2) >>
+endobj
+136 0 obj
+(Finishing Action)
+endobj
+137 0 obj
+<< /S /GoTo /D (subsection.3.1.3) >>
+endobj
+140 0 obj
+(All Transition Action)
+endobj
+141 0 obj
+<< /S /GoTo /D (subsection.3.1.4) >>
+endobj
+144 0 obj
+(Leaving Actions)
+endobj
+145 0 obj
+<< /S /GoTo /D (section.3.2) >>
+endobj
+148 0 obj
+(State Action Embedding Operators)
+endobj
+149 0 obj
+<< /S /GoTo /D (subsection.3.2.1) >>
+endobj
+152 0 obj
+(To-State and From-State Actions)
+endobj
+153 0 obj
+<< /S /GoTo /D (subsection.3.2.2) >>
+endobj
+156 0 obj
+(EOF Actions)
+endobj
+157 0 obj
+<< /S /GoTo /D (subsection.3.2.3) >>
+endobj
+160 0 obj
+(Handling Errors)
+endobj
+161 0 obj
+<< /S /GoTo /D (section.3.3) >>
+endobj
+164 0 obj
+(Action Ordering and Duplicates)
+endobj
+165 0 obj
+<< /S /GoTo /D (section.3.4) >>
+endobj
+168 0 obj
+(Values and Statements Available in Code Blocks)
+endobj
+169 0 obj
+<< /S /GoTo /D (chapter.4) >>
+endobj
+172 0 obj
+(Controlling Nondeterminism)
+endobj
+173 0 obj
+<< /S /GoTo /D (section.4.1) >>
+endobj
+176 0 obj
+(Priorities)
+endobj
+177 0 obj
+<< /S /GoTo /D (section.4.2) >>
+endobj
+180 0 obj
+(Guarded Operators that Encapsulate Priorities)
+endobj
+181 0 obj
+<< /S /GoTo /D (subsection.4.2.1) >>
+endobj
+184 0 obj
+(Entry-Guarded Concatenation)
+endobj
+185 0 obj
+<< /S /GoTo /D (subsection.4.2.2) >>
+endobj
+188 0 obj
+(Finish-Guarded Concatenation)
+endobj
+189 0 obj
+<< /S /GoTo /D (subsection.4.2.3) >>
+endobj
+192 0 obj
+(Left-Guarded Concatenation)
+endobj
+193 0 obj
+<< /S /GoTo /D (subsection.4.2.4) >>
+endobj
+196 0 obj
+(Longest-Match Kleene Star)
+endobj
+197 0 obj
+<< /S /GoTo /D (chapter.5) >>
+endobj
+200 0 obj
+(Interface to Host Program)
+endobj
+201 0 obj
+<< /S /GoTo /D (section.5.1) >>
+endobj
+204 0 obj
+(Variables Used by Ragel)
+endobj
+205 0 obj
+<< /S /GoTo /D (section.5.2) >>
+endobj
+208 0 obj
+(Alphtype Statement)
+endobj
+209 0 obj
+<< /S /GoTo /D (section.5.3) >>
+endobj
+212 0 obj
+(Getkey Statement)
+endobj
+213 0 obj
+<< /S /GoTo /D (section.5.4) >>
+endobj
+216 0 obj
+(Access Statement)
+endobj
+217 0 obj
+<< /S /GoTo /D (section.5.5) >>
+endobj
+220 0 obj
+(Variable Statement)
+endobj
+221 0 obj
+<< /S /GoTo /D (section.5.6) >>
+endobj
+224 0 obj
+(Pre-Push Statement)
+endobj
+225 0 obj
+<< /S /GoTo /D (section.5.7) >>
+endobj
+228 0 obj
+(Post-Pop Statement)
+endobj
+229 0 obj
+<< /S /GoTo /D (section.5.8) >>
+endobj
+232 0 obj
+(Write Statement)
+endobj
+233 0 obj
+<< /S /GoTo /D (subsection.5.8.1) >>
+endobj
+236 0 obj
+(Write Data)
+endobj
+237 0 obj
+<< /S /GoTo /D (subsection.5.8.2) >>
+endobj
+240 0 obj
+(Write Start, First Final and Error)
+endobj
+241 0 obj
+<< /S /GoTo /D (subsection.5.8.3) >>
+endobj
+244 0 obj
+(Write Init)
+endobj
+245 0 obj
+<< /S /GoTo /D (subsection.5.8.4) >>
+endobj
+248 0 obj
+(Write Exec)
+endobj
+249 0 obj
+<< /S /GoTo /D (subsection.5.8.5) >>
+endobj
+252 0 obj
+(Write Exports)
+endobj
+253 0 obj
+<< /S /GoTo /D (section.5.9) >>
+endobj
+256 0 obj
+(Maintaining Pointers to Input Data)
+endobj
+257 0 obj
+<< /S /GoTo /D (section.5.10) >>
+endobj
+260 0 obj
+(Specifying the Host Language)
+endobj
+261 0 obj
+<< /S /GoTo /D (section.5.11) >>
+endobj
+264 0 obj
+(Choosing a Generated Code Style)
+endobj
+265 0 obj
+<< /S /GoTo /D (chapter.6) >>
+endobj
+268 0 obj
+(Beyond the Basic Model)
+endobj
+269 0 obj
+<< /S /GoTo /D (section.6.1) >>
+endobj
+272 0 obj
+(Parser Modularization)
+endobj
+273 0 obj
+<< /S /GoTo /D (section.6.2) >>
+endobj
+276 0 obj
+(Referencing Names)
+endobj
+277 0 obj
+<< /S /GoTo /D (section.6.3) >>
+endobj
+280 0 obj
+(Scanners)
+endobj
+281 0 obj
+<< /S /GoTo /D (section.6.4) >>
+endobj
+284 0 obj
+(State Charts)
+endobj
+285 0 obj
+<< /S /GoTo /D (subsection.6.4.1) >>
+endobj
+288 0 obj
+(Join)
+endobj
+289 0 obj
+<< /S /GoTo /D (subsection.6.4.2) >>
+endobj
+292 0 obj
+(Label)
+endobj
+293 0 obj
+<< /S /GoTo /D (subsection.6.4.3) >>
+endobj
+296 0 obj
+(Epsilon)
+endobj
+297 0 obj
+<< /S /GoTo /D (subsection.6.4.4) >>
+endobj
+300 0 obj
+(Simplifying State Charts)
+endobj
+301 0 obj
+<< /S /GoTo /D (subsection.6.4.5) >>
+endobj
+304 0 obj
+(Dropping Down One Level of Abstraction)
+endobj
+305 0 obj
+<< /S /GoTo /D (section.6.5) >>
+endobj
+308 0 obj
+(Semantic Conditions)
+endobj
+309 0 obj
+<< /S /GoTo /D (section.6.6) >>
+endobj
+312 0 obj
+(Implementing Lookahead)
+endobj
+313 0 obj
+<< /S /GoTo /D (section.6.7) >>
+endobj
+316 0 obj
+(Parsing Recursive Language Structures)
+endobj
+317 0 obj
+<< /S /GoTo /D [318 0 R /Fit ] >>
+endobj
+320 0 obj <<
+/Length 214
+/Filter /FlateDecode
+>>
+stream
+xu=O@
+wXDŽIH%ts*1 &[<dl*gަf0uDv.Zǐ:xUO?hcI}Y-Az;~4AV~o!k`UA}l50Z[/566믘&yG0Gb޵4뷄1zSbly3KzMC;Rt}xI
+endstream
+endobj
+318 0 obj <<
+/Type /Page
+/Contents 320 0 R
+/Resources 319 0 R
+/MediaBox [0 0 612 792]
+/Parent 326 0 R
+>> endobj
+321 0 obj <<
+/D [318 0 R /XYZ 71 735.4 null]
+>> endobj
+322 0 obj <<
+/D [318 0 R /XYZ 72 702.645 null]
+>> endobj
+319 0 obj <<
+/Font << /F16 323 0 R /F17 324 0 R /F15 325 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+329 0 obj <<
+/Length 883
+/Filter /FlateDecode
+>>
+stream
+xڍU]o:}H8nVݶJVս@ Qʿa(W/3s<_>qᆻ6:FA^zS!Yl˭;~| B7Q2tO1mW65)Avs?LoH hF&Ԗon(c@BqD\
+or u-A)Ds9OLɥml}bO1
+@l((;Ŝ_ umP#`9!o I͞KvBӢYzGmam3fG mgYz[ښŸ
+}У(a6P^T1DFb U1OI᫐9/fo>rŬrJDܵ8`Gg5 @g*~)ҝu
+r9rEt1 ">\?PƖQ[k/A].mjFk8 dt^|k513;mo3%%}J@^Rh|u/ߡPAD&a ~g7
+endstream
+endobj
+328 0 obj <<
+/Type /Page
+/Contents 329 0 R
+/Resources 327 0 R
+/MediaBox [0 0 612 792]
+/Parent 326 0 R
+>> endobj
+330 0 obj <<
+/D [328 0 R /XYZ 71 735.4 null]
+>> endobj
+332 0 obj <<
+/D [328 0 R /XYZ 72 572.134 null]
+>> endobj
+327 0 obj <<
+/Font << /F20 331 0 R /F15 325 0 R /F21 333 0 R /F23 334 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+373 0 obj <<
+/Length 1174
+/Filter /FlateDecode
+>>
+stream
+xs6+8yl'mto{ZY2__ qfbrc[(}O~>v= zG013?+
+Pɯ!;^ \<.7ogյ 4)6 ^.h;R-';hu6Ơm}Rzȶx
+!aMLq$Lp,&0U9<ez1=#
+endstream
+endobj
+372 0 obj <<
+/Type /Page
+/Contents 373 0 R
+/Resources 371 0 R
+/MediaBox [0 0 612 792]
+/Parent 326 0 R
+/Annots [ 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R ]
+>> endobj
+335 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [71.004 546.68 158.526 556.248]
+/A << /S /GoTo /D (chapter.1) >>
+>> endobj
+336 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 533.131 156.057 542.699]
+/A << /S /GoTo /D (section.1.1) >>
+>> endobj
+337 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 519.581 166.572 529.029]
+/A << /S /GoTo /D (section.1.2) >>
+>> endobj
+338 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 506.032 159.027 515.479]
+/A << /S /GoTo /D (section.1.3) >>
+>> endobj
+339 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 492.483 180.39 502.051]
+/A << /S /GoTo /D (section.1.4) >>
+>> endobj
+340 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 476.813 210.421 488.502]
+/A << /S /GoTo /D (section.1.5) >>
+>> endobj
+341 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [71.004 452.354 249.104 464.044]
+/A << /S /GoTo /D (chapter.2) >>
+>> endobj
+342 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 438.805 281.633 450.495]
+/A << /S /GoTo /D (section.2.1) >>
+>> endobj
+343 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 425.256 251.845 436.945]
+/A << /S /GoTo /D (subsection.2.1.1) >>
+>> endobj
+344 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 413.828 240.118 423.396]
+/A << /S /GoTo /D (subsection.2.1.2) >>
+>> endobj
+345 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 400.279 254.269 409.847]
+/A << /S /GoTo /D (subsection.2.1.3) >>
+>> endobj
+346 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 384.608 252.542 396.298]
+/A << /S /GoTo /D (subsection.2.1.4) >>
+>> endobj
+347 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 371.059 252.33 382.749]
+/A << /S /GoTo /D (subsection.2.1.5) >>
+>> endobj
+348 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 357.51 274.421 369.199]
+/A << /S /GoTo /D (section.2.2) >>
+>> endobj
+349 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 346.082 187.754 355.65]
+/A << /S /GoTo /D (section.2.3) >>
+>> endobj
+350 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 330.412 214.39 342.101]
+/A << /S /GoTo /D (section.2.4) >>
+>> endobj
+351 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 316.862 252.178 328.552]
+/A << /S /GoTo /D (section.2.5) >>
+>> endobj
+352 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 305.434 178.148 314.881]
+/A << /S /GoTo /D (subsection.2.5.1) >>
+>> endobj
+353 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 291.885 205.209 301.332]
+/A << /S /GoTo /D (subsection.2.5.2) >>
+>> endobj
+354 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 278.336 196.815 287.904]
+/A << /S /GoTo /D (subsection.2.5.3) >>
+>> endobj
+355 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 262.666 231.997 274.355]
+/A << /S /GoTo /D (subsection.2.5.4) >>
+>> endobj
+356 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 251.238 218.451 260.685]
+/A << /S /GoTo /D (subsection.2.5.5) >>
+>> endobj
+357 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 237.688 205.148 247.257]
+/A << /S /GoTo /D (subsection.2.5.6) >>
+>> endobj
+358 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 222.018 267.148 233.586]
+/A << /S /GoTo /D (subsection.2.5.7) >>
+>> endobj
+359 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 208.469 191.178 220.158]
+/A << /S /GoTo /D (subsection.2.5.8) >>
+>> endobj
+360 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 194.92 199.512 206.488]
+/A << /S /GoTo /D (subsection.2.5.9) >>
+>> endobj
+361 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 181.37 192.087 192.939]
+/A << /S /GoTo /D (subsection.2.5.10) >>
+>> endobj
+362 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 167.821 271.694 179.511]
+/A << /S /GoTo /D (subsection.2.5.11) >>
+>> endobj
+363 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 156.393 249.906 165.962]
+/A << /S /GoTo /D (section.2.6) >>
+>> endobj
+364 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 142.844 176.633 152.412]
+/A << /S /GoTo /D (section.2.7) >>
+>> endobj
+365 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [71.004 118.386 160.673 127.954]
+/A << /S /GoTo /D (chapter.3) >>
+>> endobj
+366 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 102.715 208.3 114.405]
+/A << /S /GoTo /D (section.3.1) >>
+>> endobj
+367 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 89.166 225.906 100.734]
+/A << /S /GoTo /D (subsection.3.1.1) >>
+>> endobj
+368 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 75.617 228.966 87.306]
+/A << /S /GoTo /D (subsection.3.1.2) >>
+>> endobj
+369 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 64.189 251.572 73.757]
+/A << /S /GoTo /D (subsection.3.1.3) >>
+>> endobj
+374 0 obj <<
+/D [372 0 R /XYZ 125.795 735.4 null]
+>> endobj
+375 0 obj <<
+/D [372 0 R /XYZ 72 572.134 null]
+>> endobj
+371 0 obj <<
+/Font << /F20 331 0 R /F22 376 0 R /F15 325 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+422 0 obj <<
+/Length 1566
+/Filter /FlateDecode
+>>
+stream
+x[S8ytf֩uG. K)S}H<ue?JءJCY016tt\:N9?: A/bu"(`c:_OWû bBkyťis1z^Db}9
+<js
+U[
+ ۺIEi" U.AlDWƞ hW-6vF^iG8Xg⸝xO7[&PU0
+6wrv*V3gͬ<<+4 '.jqS-mY u_M+)eEFi]L0޶]fT
+.F'f"Бp[y2o`R9 f<?{}m.t *v
+endstream
+endobj
+421 0 obj <<
+/Type /Page
+/Contents 422 0 R
+/Resources 420 0 R
+/MediaBox [0 0 612 792]
+/Parent 326 0 R
+/Annots [ 370 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R ]
+>> endobj
+370 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 688.569 226.239 700.137]
+/A << /S /GoTo /D (subsection.3.1.4) >>
+>> endobj
+377 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 675.019 283.815 686.709]
+/A << /S /GoTo /D (section.3.2) >>
+>> endobj
+378 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 663.591 308.391 673.16]
+/A << /S /GoTo /D (subsection.3.2.1) >>
+>> endobj
+379 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 650.042 212.148 659.489]
+/A << /S /GoTo /D (subsection.3.2.2) >>
+>> endobj
+380 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 634.372 226.33 646.061]
+/A << /S /GoTo /D (subsection.3.2.3) >>
+>> endobj
+381 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 620.823 267.451 632.512]
+/A << /S /GoTo /D (section.3.3) >>
+>> endobj
+382 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 609.395 346.906 618.963]
+/A << /S /GoTo /D (section.3.4) >>
+>> endobj
+383 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [71.004 582.815 246.883 594.505]
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+384 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 571.387 158.36 580.834]
+/A << /S /GoTo /D (section.4.1) >>
+>> endobj
+385 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 555.717 339.709 567.406]
+/A << /S /GoTo /D (section.4.2) >>
+>> endobj
+386 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 542.168 294.497 553.857]
+/A << /S /GoTo /D (subsection.4.2.1) >>
+>> endobj
+387 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 530.74 296.648 540.308]
+/A << /S /GoTo /D (subsection.4.2.2) >>
+>> endobj
+388 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 517.19 286.284 526.759]
+/A << /S /GoTo /D (subsection.4.2.3) >>
+>> endobj
+389 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 501.52 279.906 513.209]
+/A << /S /GoTo /D (subsection.4.2.4) >>
+>> endobj
+390 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [71.004 477.062 235.414 488.751]
+/A << /S /GoTo /D (chapter.5) >>
+>> endobj
+391 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 463.512 230.815 475.202]
+/A << /S /GoTo /D (section.5.1) >>
+>> endobj
+392 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 449.963 210.815 461.653]
+/A << /S /GoTo /D (section.5.2) >>
+>> endobj
+393 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 436.414 200.587 448.104]
+/A << /S /GoTo /D (section.5.3) >>
+>> endobj
+394 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 424.986 198.209 434.433]
+/A << /S /GoTo /D (section.5.4) >>
+>> endobj
+395 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 411.437 206.299 421.005]
+/A << /S /GoTo /D (section.5.5) >>
+>> endobj
+396 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 397.888 210.906 407.456]
+/A << /S /GoTo /D (section.5.6) >>
+>> endobj
+397 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 382.217 210.269 393.786]
+/A << /S /GoTo /D (section.5.7) >>
+>> endobj
+398 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 370.789 193.572 380.236]
+/A << /S /GoTo /D (section.5.8) >>
+>> endobj
+399 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 357.24 203.178 366.687]
+/A << /S /GoTo /D (subsection.5.8.1) >>
+>> endobj
+400 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 341.57 312.481 353.259]
+/A << /S /GoTo /D (subsection.5.8.2) >>
+>> endobj
+401 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 330.142 196.966 339.589]
+/A << /S /GoTo /D (subsection.5.8.3) >>
+>> endobj
+402 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 316.593 202.572 326.04]
+/A << /S /GoTo /D (subsection.5.8.4) >>
+>> endobj
+403 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 300.922 217.512 312.49]
+/A << /S /GoTo /D (subsection.5.8.5) >>
+>> endobj
+404 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 287.373 285.148 298.941]
+/A << /S /GoTo /D (section.5.9) >>
+>> endobj
+405 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 273.824 257.087 285.513]
+/A << /S /GoTo /D (section.5.10) >>
+>> endobj
+406 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 260.275 275.83 271.964]
+/A << /S /GoTo /D (section.5.11) >>
+>> endobj
+407 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [71.004 235.816 224.429 247.506]
+/A << /S /GoTo /D (chapter.6) >>
+>> endobj
+408 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 224.388 221.118 233.957]
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+409 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 208.718 205.603 220.407]
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+410 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 197.29 156.36 206.737]
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+411 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 183.741 175.148 193.309]
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+412 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 170.191 169.512 179.639]
+/A << /S /GoTo /D (subsection.6.4.1) >>
+>> endobj
+413 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 156.642 175.875 166.211]
+/A << /S /GoTo /D (subsection.6.4.2) >>
+>> endobj
+414 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 140.972 184.724 152.661]
+/A << /S /GoTo /D (subsection.6.4.3) >>
+>> endobj
+415 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 127.423 267.633 139.112]
+/A << /S /GoTo /D (subsection.6.4.4) >>
+>> endobj
+416 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [112.458 113.873 349.027 125.563]
+/A << /S /GoTo /D (subsection.6.4.5) >>
+>> endobj
+417 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 102.445 212.996 112.014]
+/A << /S /GoTo /D (section.6.5) >>
+>> endobj
+418 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 86.775 234.603 98.465]
+/A << /S /GoTo /D (section.6.6) >>
+>> endobj
+419 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [87.367 73.226 301.572 84.794]
+/A << /S /GoTo /D (section.6.7) >>
+>> endobj
+423 0 obj <<
+/D [421 0 R /XYZ 71 735.4 null]
+>> endobj
+420 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F22 376 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+427 0 obj <<
+/Length 2326
+/Filter /FlateDecode
+>>
+stream
+x}XK -TyM)&v+.!ɡlIɝ$5# F&!>8>lp&17狹v" ~8N]zD|ICOGʱ\4\V=.,M~djScH4Lrs%Qw40JPk!V7;!uN E1inwtwOBoZwg%7owy*xDuderZӰHI쥥q}lL AyJ؟- ?\Y]<V$4 ~sذ唯ŖQ!<4ԛj߲ *P%$KX5/I\wcwͲPqȘjFlFHsg(9.rPF;;k g
+/o.@b.>l4foybMb&ItV@؆ +Eo wԣ9['x.&Kɔj#سDH6I~+Wa5Nی@ןn,TئV$QWfγXC-Nu =H;m@QU^b0w|>H3
+_9 E-R@MJ]n33˲…,F$oSԚ"vEGn>zi{$W=t~OrӒ7 +
+D s6u'ERNoyi0^y53Q/kLR8Y݉4XEї[He).ZA+Fh&'ِFQJrݽ j6?J3%/fj3~vVh(Kcf6!*ʡK%Ә<q¹ QgفUcW\^(/ ZQ'2:,%[-|
+ly$QH;iW
+Io Z)]#*$hu`FEV5.{=~dհ7h*AN ?VqL~NZQ-Z|=$׆/nUU h&T7iEFIdur]OlR6N%5.y&Y `F#Q
+~HJנ7 4 oȄ #grm
+^{KTA3hn n^'JMJ G#A=Cg,<䱍u2eݐ8V
+?UqsI#iDX%cePI$F+vV7u\Du%(7Ѝ5~fGĪ5Oh
+.K]\oQ5]Eu%HVHxr 5p*
+endstream
+endobj
+426 0 obj <<
+/Type /Page
+/Contents 427 0 R
+/Resources 425 0 R
+/MediaBox [0 0 612 792]
+/Parent 326 0 R
+>> endobj
+2 0 obj <<
+/D [426 0 R /XYZ 72 702.645 null]
+>> endobj
+6 0 obj <<
+/D [426 0 R /XYZ 72 527.303 null]
+>> endobj
+10 0 obj <<
+/D [426 0 R /XYZ 72 224.693 null]
+>> endobj
+425 0 obj <<
+/Font << /F20 331 0 R /F15 325 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+430 0 obj <<
+/Length 3204
+/Filter /FlateDecode
+>>
+stream
+xڍْ6_1oKU<&;:[laIPpƓ߾Cñe軛9lo~~?M+ex;$nǛv?~qw</>n"~w?$R8eDj+x{%#]ԫfse`,۠ B#X,<כ08 0U˥֚@eR;ʟVN'*tsY03\q(Wm3O\pko8
+Eҵ #sujO:1JΕE 鶒E6Y74Z3]w!0<OUo.δ'^O!4'R#Lj{b
+TN+ih@jHxmT-yUF'Þɑ+:2 Yo0#h&\q+!H 8E5AwVG JpnY:}=wd(=FR(rxL>gLfqң .{X;|&8qhC_yN+! dEzrρ|?퇋fO}b
+ M'g${y
+ښ^}!S rʴ<ƈW4
+sL|8Rǂ@$.D S~`o+oI+x6T%csK R5(703a
+WzVʖuܓGI+$`#%zjknL}|6:)P2K@ODaT!*B,?n} EGb؉HΊlئNG15|@t_{lۓ}sXEQ վOxte\&K+!`>fo_wa
+xB11o) /
+O~ؤRd+>{Zƹe𪝯P)-ILP|s'' i/}rW%E@b<8 $Be((+9r@h;K6K͇"x I!5]Si$VrjQI" Vj^FA9k{|,A '8*mIߊH;KLH)V6^<B1!\z wINɟ )
+S*(L|4)7.+~+:i^uE. yF 3"90p,Z"i3?a6E; ~xL 7c^(:vm?)I }Fe'
+Dnh2 W:ֺ~2ͤ!-Pc}ZN8 iO41 #<4>k_;9ϜNZ{,91Rڽ Ʌ>0s̬JLtOݚ"9V/&̮kl&V.gZ0ne(_pȅe4dLMI?b5v+dIX`E7bo17E:0tkyc!}2j!к`^n%E1{
+P䴆`[J&oq`XޕAl>|SԒ[_]Fb?,;H+@kSiUW<.,LėS}PcnIrN y2g;'+ W̰^G/J?bM\蹍+-,+2| kh
+Tևs n˖Y(4{+k![>59q/:6k )?Oӧw٩
+endstream
+endobj
+429 0 obj <<
+/Type /Page
+/Contents 430 0 R
+/Resources 428 0 R
+/MediaBox [0 0 612 792]
+/Parent 326 0 R
+>> endobj
+431 0 obj <<
+/D [429 0 R /XYZ 125.795 735.4 null]
+>> endobj
+14 0 obj <<
+/D [429 0 R /XYZ 72 402.142 null]
+>> endobj
+428 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F20 331 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+434 0 obj <<
+/Length 3332
+/Filter /FlateDecode
+>>
+stream
+xڍZݓ۶_qoX)~Icq&L>HHBM*@|_
+ 3pmҬn:36.֜}؍F6;_}~a:,@]-M+A:W,",0u] #qѪY[&}p1Xib/`<JsBXlVՒ@5|Q
+>1\EK/)7,#l흑ꙹn,a9՘ΐRdCv 5l2_Hy5;
+lW%O;
+_P))oOyx/{lBNg ,}Ey}LyQ&/%=Jzh6y{N%WtJ+F;t ĉB32~é!@17 /jj L ΋D(m] N| *H-`xIq[IoۣPG=Feg<"d ,hX qwu4ci<% ( 2j6tCd+:v1XЙ-v׫\Hv[p.`pLr26
+|u8QϠmCO1bݥakԵ9 qB55[x>b"H?w,Gßޔ t[{$
+M-;qlU)N4d,HNHv`@,';oir],Qk[x)H7lwkaO$R W*ޖ:jn_0Q#U sP[YZ&6Z
+bgw=lYfN[7$\9 LWJHlau^
+"dzʹ5(Z#m8G#0|8esqYliӴ9*Y_/wU+=0hrN}q缪  m)U$-
+ňSH7d; bSU>+frPCEipDf*  }8ie/` {/aPQ-Uy-vOw GdkjI{@"i y_[M|oB1( FE!nBZSRN穜3
+\}W\]Z#WMW諒.p6A{ *>h U7ӨVRtUYqIKdFdF|T`}FԞD}\/ĵ]f-|Nv-['Ӭ(!'PvHcv&p1غHI{<--(>f;+kگ2]kOh?|=DPFeP,{)n]>z`>?qK'iHtP\-}T D E۔Cr@ /^X96 وxa?9HvL<@Heԫg)B(XΛվZQ/ޛPλWTvWdg@qeMľزjQ-B,>[8nS͜RbV2?\;. ]CJUe(c~`%\4Bz~B <(ƿ:|h !U9zHE|"^_m`fFd"W{*EHHm .y^6}~KeX3¥tz W}JU 
+&vyD#0Ÿ|!vTA^`ydT\cWGǹ~C`R]+Q]:;i?uH9V< 'A4Rҫ^mv#`^`mOx i^Cչ[Q8.W:wycԱR!Jy2ߑe7;ybI}ɥf
+u
+{eUg!+GEd V:gvj
+y"r
+|j2E]V 2W UĀu-FB~s/Mb?0?U ,Dڮ6UN8ԡ*uK .Qd
+F/3JI(-?u?'wQ*Yະϯ$Xf'Q&||1?_i*vh3zu4s8 O ~x~P:N}yӇ73M0rpLgzOIJ$iÁYwPu# ~(l%B)I J!R(8`: L%-x<+"_?02cT :%0zy\ ?r!ǑcG$^v2!
+endstream
+endobj
+433 0 obj <<
+/Type /Page
+/Contents 434 0 R
+/Resources 432 0 R
+/MediaBox [0 0 612 792]
+/Parent 436 0 R
+>> endobj
+435 0 obj <<
+/D [433 0 R /XYZ 71 735.4 null]
+>> endobj
+432 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+439 0 obj <<
+/Length 3294
+/Filter /FlateDecode
+>>
+stream
+x}ZKsPjG{Ǝ7xSkrsDr _i*U h4~S&ۇ,I*6.ϋ??o,ˢv/?Mw׿ןn{~H%L
+N8b=fCܕqumQ}uMˣP?aoѴ㠃fp2a빶r1.U?ԃilgԺk0p D`atSPϗ$]J08V4xُ6ztPwĢ3-1`mQDCk<Aя=o~wH6io&Гp
+gǶv@H|&fZ Sl=ؾcIy
+qFRm+WQ0x
+XBXʡ;^N|u'HDɢEʥ^k*4+AРD3V ][(;eUYcδb#17;(Wq$I,!//Z$s0u` 7)AR~7I~88( ]NG%Sm߷Y{ވBJ
+L{Un#5:w/
+1^NS a 6Pyu~iR;/?<9p3ޫ?.mr.K̻DYٴht4cTVt!4Aϗ9Ls<%}рc=h2_
+ z>ohG}&Q̋`4F
+Y<Mr2V(r팵Fmj~DTSjX-oQyzb` jJI:ɦ/8 L2 K(|Z!x QEN01xLy)]sH~aN}/6}3%ۭMAnS;7s=:g@C۞t0_M'kq: ^ȸ\Aō\ 83x>KPdh4)= 34)7 %ZNZoSD<*XR\$਄j4U +VD8=ޔd`JyWn@bgFļ<=IΚ{h˯eM70οvT6Ks[gL3'3 ͤ:~| yaGH
+DUұ!\<% K*"$Ffbx[U<! jm{3ZbSH^:'S7"k =8ҹ^-UE#7t>w
+ubUl׎,i;-\V뱝4'e;d\[C c
+^臔BTRZCb/*ZhSE-ԯ!945 %ty>۽R.^^PGw*Ix٥zʩ'q{15 (8ݏVx_<y)ZIBN M|}-E{,@f"Y4 8?%zovh&bպ@Q뵫p=]3Lh9LD&.JhB'Kf^˱dҋGUAPfZm[p@m(D
+jXપ]K"]p Vdpє;V[Uc#n
+@\kuCbxֆFR% &5bJv(yx/: S<# MT㖄4]xM! #Rcz3Q
+~/
+IyJ$*
+A^O;OMzA0<4H3"5'Y{
+gDԘk>Ͱ)4PaKROW&@μjh,<
+sY
+endstream
+endobj
+438 0 obj <<
+/Type /Page
+/Contents 439 0 R
+/Resources 437 0 R
+/MediaBox [0 0 612 792]
+/Parent 436 0 R
+>> endobj
+440 0 obj <<
+/D [438 0 R /XYZ 125.795 735.4 null]
+>> endobj
+18 0 obj <<
+/D [438 0 R /XYZ 72 578.281 null]
+>> endobj
+437 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F20 331 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+443 0 obj <<
+/Length 1947
+/Filter /FlateDecode
+>>
+stream
+xڝَ6}ȓ ZQaD٢Mmh[]YR%*Eo,{(`p47p0͂ٷ߬.._H14_GQ<[_/\RJOE.Wy^?o._xL(JB?*Ӊ"g w#[^Q!u[`{YR ]"kk]1T@w!]LZu^|<_DBzf_W"W9on53EU n\zBHP˪]_p+aenU[p4{ep"|G׌w!0So]֕S=J[w[0
+3d @\HL&]a(=!MC$֐{5MYT$@:Ȏ3Dn4K+60`zk1X300($<VKt|ϴJmkF
+o6!5l,Ϧ)JĆņ wg&bj(S`3%<Rxg$dBVdx̎`-S=ckܿA[N^j<ku{Brt) p5dCn$yiē}O*~BN)i0-
+JRT~7oG|. w_Y=z$*zyDi|',]D=׿ǿ\çᙠ]/!- r^<>؛
+b)3ځXd̙A؊X|czO:l' aBwX0nJ[5)*;9`3.2.9(`T~Vu\jsۤV+ޘ`A]qh-°=}]O $GA̕ΐ|jz'=CCr1UkިZm±35%Ʒ6tGE/s+ .ƾﰋB0avV7:8ͦoQXrHS$1$ IT|,eI|3Lh3.D/Sb? ] [LiW̜@+#pU FJpKVOfiUNގ3t&ĥ{ٓeG!~INaû~<ِI
+_+lu%˴h`(H
+۾[G v*c.N(H}DMk(E7aGZL);NRԉ dh' &"2pRD`Whg<^Gy+ 5GWmN 1/ ކA l=3nE"
+K oe,W0Kh%\9o{bIFLZZN9j4HֲyV7/
+P6y gβ:3,:}'1VPˀ/(F%1*/dJ𴽏SyG \N<f@2iħ0 mO8z}GgN
+endstream
+endobj
+442 0 obj <<
+/Type /Page
+/Contents 443 0 R
+/Resources 441 0 R
+/MediaBox [0 0 612 792]
+/Parent 436 0 R
+>> endobj
+444 0 obj <<
+/D [442 0 R /XYZ 71 735.4 null]
+>> endobj
+22 0 obj <<
+/D [442 0 R /XYZ 72 439.203 null]
+>> endobj
+441 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F20 331 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+449 0 obj <<
+/Length 1796
+/Filter /FlateDecode
+>>
+stream
+xڅn6_al*&.Z+֡
+ k>}`$&K.M.s!e)Q<:n~'? UqvX~ǫb{޴L\@`2?4u׷Cޗ>7|}޾M7/8T-;S=~;)</A$J~dNi0A^o"RZǡ+ /}^ [#5[F<ͮNj~oo:˻n
+b*M*0K&LFft4U==L-v]V#֍5퀄Ʃl 8rgP(`hrqT# E7“URccTI;j쐣t50)crutķ]ji܊ل4N|KDEؘg:SmȎs^ 1ÀԠojG ѶٲaE @.Bqc`Xf+\E`Dv ciFÏ27vۥ
+BcRaHc]"2ʤ_!lӎ
+HƸ q|вed< Exy7a%׵eA$*;2 ᇴe^6 n۶9`Y&$
+ N4+mqsZ
+d#TdE%
+endstream
+endobj
+448 0 obj <<
+/Type /Page
+/Contents 449 0 R
+/Resources 447 0 R
+/MediaBox [0 0 612 792]
+/Parent 436 0 R
+/Annots [ 446 0 R ]
+>> endobj
+446 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [133.9 305.761 149.832 317.45]
+/A << /S /GoTo /D (figure.2.1) >>
+>> endobj
+450 0 obj <<
+/D [448 0 R /XYZ 125.795 735.4 null]
+>> endobj
+26 0 obj <<
+/D [448 0 R /XYZ 72 702.645 null]
+>> endobj
+30 0 obj <<
+/D [448 0 R /XYZ 72 522.483 null]
+>> endobj
+451 0 obj <<
+/D [448 0 R /XYZ 250.651 110.633 null]
+>> endobj
+447 0 obj <<
+/Font << /F20 331 0 R /F15 325 0 R /F34 445 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+454 0 obj <<
+/Length 2346
+/Filter /FlateDecode
+>>
+stream
+xڭَ}ؗF"u&z:ݻtiyH#ڒ!s}=0,X:WWﶯp~j[
+~ʏx-Wzޤi]aa2oۻq5,֙7"]7:6LD1p g8
+Vaqy7:8=*͡nA4>jwW7;c22T`Qs9n&6;{wcT
+? ~*޽}uDSޱX2u8Dۛ:T Z_oT{'U
+]8 ] xi H'Km{TXl}T]v]UЊAU $@X>xA:W 0Q(HiG-`S2)
+n=qf*p[]6C$4GϪxo$NGS⟊"`plי=P}t ,;CyF3{-?*E{8е
+]ֲևP*Kk(ϒ.L@rIk: q$a0
+!)a!{/Ы0mB
+H;=HP;Th6@;uoYjsW}hXIG*bS酄iU;7Bp %5j.r<>ޥn<r(̗Cf DU
+n1B7J%Z7uiJ^v"z.Df&ztH4ɉ45D%?z趱#<W,t*tɮ:V< G+xt:HAd-^TC>TkI+HkKϛOiB]pBIfnC,p
+tŕ
+Y
+"
+{Ff?[a
+endstream
+endobj
+453 0 obj <<
+/Type /Page
+/Contents 454 0 R
+/Resources 452 0 R
+/MediaBox [0 0 612 792]
+/Parent 436 0 R
+>> endobj
+455 0 obj <<
+/D [453 0 R /XYZ 71 735.4 null]
+>> endobj
+34 0 obj <<
+/D [453 0 R /XYZ 72 702.645 null]
+>> endobj
+38 0 obj <<
+/D [453 0 R /XYZ 72 562.447 null]
+>> endobj
+42 0 obj <<
+/D [453 0 R /XYZ 72 434.931 null]
+>> endobj
+46 0 obj <<
+/D [453 0 R /XYZ 72 252.915 null]
+>> endobj
+50 0 obj <<
+/D [453 0 R /XYZ 72 98.604 null]
+>> endobj
+452 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F20 331 0 R /F34 445 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+461 0 obj <<
+/Length 2450
+/Filter /FlateDecode
+>>
+stream
+xڽYmo_!\?*PN߹E@saM$#stE{mIIrvvvgv^Y]|[xrWbY$>0|z_ׯ. ,YIZ/fv^|u^uLkDK۳~~jY7_yx0vtyyrȅ qbwI3wEX8~IP7ܖAꤠ^WxnikYKOzaֿu+|{+w;^uO04sl견qCQmMJ,d~
+IÉSE2Kq 9D\=; aQ#B3f4.scn
+I5,1NZ0ّ E4WǦ<,HQM$Ny#4CF}Y(9S2I %̋[73%6 %Ւw2'Sdtl=WJܾ"sE;uw^P(d|%V;
+" &|ttАt. Nf FPS:CjM8$yJ dUᱠ[
+ȡt}OCzX"Ž-ǾyFws2(I@g8-(nU:$.`H+D)|@Pać;#B6mms|<
+X90
+q3OUq3zkՍx`f\no Wg<
+endstream
+endobj
+460 0 obj <<
+/Type /Page
+/Contents 461 0 R
+/Resources 459 0 R
+/MediaBox [0 0 612 792]
+/Parent 436 0 R
+/Annots [ 456 0 R 457 0 R ]
+>> endobj
+456 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [109.186 579.35 133.602 591.039]
+/A << /S /GoTo /D (subsection.5.8.5) >>
+>> endobj
+457 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [243.095 344.685 259.027 356.375]
+/A << /S /GoTo /D (section.2.3) >>
+>> endobj
+462 0 obj <<
+/D [460 0 R /XYZ 125.795 735.4 null]
+>> endobj
+54 0 obj <<
+/D [460 0 R /XYZ 72 536.808 null]
+>> endobj
+58 0 obj <<
+/D [460 0 R /XYZ 72 112.854 null]
+>> endobj
+459 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F21 333 0 R /F20 331 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+472 0 obj <<
+/Length 2644
+/Filter /FlateDecode
+>>
+stream
+xڝYmH>ʗS
+\GH#BNn(Fdm+>W  0Ig3s1j)w]p9}ڍ`x{%2I=6L.Aڳv߮B 08,].ǫOw"op}wh~?;F R(:@V$RXw`Q{U5]W}ؗLf9.d1ٳKarU]YwU_}r $`D0*lRTh5;ە0r^\9zqXnp_ v6s?HQ:k(41#JqS6gQf`v b6L=%>l6*_GG۔5E_xkhʨ)C@kv/b^^ہ <rvt?/0NӑsOV_mٹà$ ΃<r~T8k|N,P]*9BK}Ƥ4x]!G"\4ҰLL>"qR \FŒ501wAOpY&"˳)աP{v J";J}pa NgcN9'lPH+:R1wN'x%+Sʡ[MzAdlYhRĹb~:ִT)%%Y6]w0ܴ}7 D
+U~]YIz-BF35#H7AWB$S4
+#z
+F*b ɟ*bpT`T`:K~mä=N֮A,L
+3^ {$ضK^.P,By850lr޴ ф (-#ǽ!d
+Jy j7@o>YK fN'ޛӡlPgkϭ  ?& r8Z 8#⨱1f a+uI, F'0l (ᔅ'gː۠MYT2 dSBЙj1֓\kN-R0Ka`
+(`3S 0*&D?aD%W:z%0ͺ8RNٳd~BWe2
+"wFruW/GP
+J0_nzP !m2;vL $?:󥐨*M<tGX#- G.RCw*yQ F# ]
+C~
+y0mf=,i8Pϑ\d Ò=l M)P%8tC>
+_X?S`4we\-X?P{̍|
+D6T#d:Į'B DFsΈY7Vg~A7α-U STI$񚆤`~p0WYi@ВQ`J\
+74hnHdvc0kGCKoTjL
+^o7I6L
+endstream
+endobj
+471 0 obj <<
+/Type /Page
+/Contents 472 0 R
+/Resources 470 0 R
+/MediaBox [0 0 612 792]
+/Parent 474 0 R
+/Annots [ 458 0 R 464 0 R 468 0 R ]
+>> endobj
+463 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./bmconcat.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 475 0 R
+/BBox [0 0 622 58]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 476 0 R
+>>/Font << /R8 477 0 R>>
+>>
+/Length 917
+/Filter /FlateDecode
+>>
+stream
+xVM9 W6JcbiҲ}Cfb`q$U˩Ϋ>O>8d&O%C (g3P)%zEhb(i 2be^(z_ R2$gWc$?M}v8 EkPl!V_!IˈXBi0xf6)@ABeՙ
+CL1} qug&.՜JPhHL/[f &rLs].7
+dAC0"P$ y&q31#a 6^sAo 5qfnWa4ݝŝ!Bx`.[Y"A3!:ècn0T."IJ3ĴBRwsFJ3!C[g{Tb*cwǨ;q1mB{XRf*IN̆ mah9;Sa4ݝ׽3d
+
+endstream
+endobj
+475 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195621-05'00')
+/ModDate (D:20130211195621-05'00')
+/Title (bmconcat.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+476 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+477 0 obj
+<<
+/BaseFont /PLSZVI+Times-Roman
+/FontDescriptor 478 0 R
+/Type /Font
+/FirstChar 39
+/LastChar 111
+/Widths [ 333 0 0 0 0 0 0 0 0 500 500 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 500 0 0 0 278 0 0 500]
+/Encoding 479 0 R
+/Subtype /Type1
+>>
+endobj
+478 0 obj
+<<
+/Type /FontDescriptor
+/FontName /PLSZVI+Times-Roman
+/FontBBox [ 0 -14 707 688]
+/Flags 131076
+/Ascent 688
+/CapHeight 662
+/Descent -14
+/ItalicAngle 0
+/StemV 106
+/MissingWidth 500
+/XHeight 460
+/CharSet (/I/N/e/five/four/h/l/o/one/quoteright/three/two/zero)
+/FontFile3 480 0 R
+>>
+endobj
+479 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+480 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1425
+>>
+stream
+xekPWwY]hWD%IPC+ DhyJx
+2&C SEFgL&9ɲTb5"He)'\"T Ί+9KPD~8]yqN2
+D2~3+wE IJk!H  Gv!QG</dB" /
+>k8G[^TAm(
+'lMV\ܬo-$ tМ"o;X
+B5WoA
+c hTV#jutdFc0
+0Db=Yp
+VOa2|PW@〞hWL7ot@@wG79n8AA?a
+!6kG6J&1@g񪓧Zs% OD5euF}Sms $|CPⳭP ?$F)/sR1> 7g/;16~~DȒJtRmh}᢮m-Co>yp cٮ6mO8T05Wß[x' ‰`UF!K^hg{>mvM7}ПP\<^Cs5<TĒt_=boHNʖ˕_gRm>e%%T,Iߟe솗鍸כQ-y0N1f5SOQ8I0Y:-2Zt K&҆()4Utt .V~6gj-g,iCZe TCx||~
+7Z7w
+endstream
+endobj
+465 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./bmor.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 481 0 R
+/BBox [0 0 278 58]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 482 0 R
+>>/Font << /R8 483 0 R>>
+>>
+/Length 513
+/Filter /FlateDecode
+>>
+stream
+xTn1 +rۂ;NHqA t+T88;qf#)$y 0r4~O 2E
+*H5f*JVZ$B3^2TDd][m
+f6+`;oa5U No#V 3ahW.3f3I't,۷k%4e:U;թxU
+@J~փ~ Yw-u]zU:gyrvO@-zcqx Ds<Mzs| ƍl{BV+/}v;%-]YÏûxxS~zcj_ ;
+endstream
+endobj
+481 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195624-05'00')
+/ModDate (D:20130211195624-05'00')
+/Title (bmor.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+482 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+483 0 obj
+<<
+/BaseFont /XNYVKS+Times-Roman
+/FontDescriptor 484 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 111
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 250 0 0 0 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 500 0 0 0 278 0 0 500]
+/Encoding 485 0 R
+/Subtype /Type1
+>>
+endobj
+484 0 obj
+<<
+/Type /FontDescriptor
+/FontName /XNYVKS+Times-Roman
+/FontBBox [ 0 -122 707 683]
+/Flags 131076
+/Ascent 683
+/CapHeight 662
+/Descent -122
+/ItalicAngle 0
+/StemV 106
+/MissingWidth 500
+/XHeight 460
+/CharSet (/I/N/comma/e/h/l/o/one/quoteright/space/zero)
+/FontFile3 486 0 R
+>>
+endobj
+485 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+486 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1069
+>>
+stream
+xemL[U;WdawA0qlPv ղS(h--,0ݲL"}fsj<C BRa5J]8On'/  kBI"h<w?
+р
+ZAc`*rq
+ z^?B^
+]U߅xbߵT0SvxDӟܽ=)(T|~,b2&9O\Ջܔ/<k~k6I T-r :݈T-@tZgnojؕ
+n{k}Fq@i?.GN<{W"D7
+endstream
+endobj
+466 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./bmnull.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 487 0 R
+/BBox [0 0 118 58]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 488 0 R
+>>/Font << /R8 489 0 R>>
+>>
+/Length 396
+/Filter /FlateDecode
+>>
+stream
+xTN1 +|$LvrEBU/HXpquv*L~s<yDX$AU܌L*)#lȪԵ# Y
+RIM'"3V&
+`I
+2YFp^
+OWPɸ'|Ňg 9sOdŜxOckJMW0)|*O;c0wJa{"\EhDж!ddMvL+y"< dDud 1=mUUùMwD^3b%Ix8Tv'?<
+vϱu\`B=Bźw!.MƗGy?>-\
+endstream
+endobj
+487 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195622-05'00')
+/ModDate (D:20130211195622-05'00')
+/Title (bmnull.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+488 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+489 0 obj
+<<
+/BaseFont /WDLMPK+Times-Roman
+/FontDescriptor 490 0 R
+/Type /Font
+/FirstChar 48
+/LastChar 78
+/Widths [ 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 722]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+490 0 obj
+<<
+/Type /FontDescriptor
+/FontName /WDLMPK+Times-Roman
+/FontBBox [ 0 -14 707 676]
+/Flags 65568
+/Ascent 676
+/CapHeight 662
+/Descent -14
+/ItalicAngle 0
+/StemV 106
+/MissingWidth 500
+/CharSet (/I/N/zero)
+/FontFile3 491 0 R
+>>
+endobj
+491 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 532
+>>
+stream
+xcd`ab`dd M- M~H3a!]3,\fnn?V
+}IbʢРpMmmBR%LF%83=OA (K/M+VpLVHϩ,(VHLIIMi KIVp,(/SpT0200~I
+`w+[*($a0000{00h13=`ϰG~c;wFnz{[U#9[mzC#ϴM B0..ǏػO0o̩37Wo>i~n_O`m_{f?*@W-C]x?X~t.)q3^3B4;*-#087{oߌk~s
+hms֯;zhw +(7ߩ
+߾|<_ag[{dsyx
+endstream
+endobj
+467 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./bmnum.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 492 0 R
+/BBox [0 0 223 58]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 493 0 R
+>>/Font << /R8 494 0 R>>
+>>
+/Length 498
+/Filter /FlateDecode
+>>
+stream
+xTAn0 <’(JEK kS=XG%h~>=9jE@iˆXE1l( V쵃(ZS`VCwJ>%C,Ԓ`S K?&EkXxd{J?SSKkA
+ [+rV
+V1c6J ա9" JG6zD=pH c%4ބj=ϛKRVԮH2:2
+cK. p̱h7V3>͝!:G^ͮ
+Q-H)3ɪ -ZP8X3@~&V *Msw SXY;T1փk};|y6\W>oվE1-w8Ccd +%r;pzNͅ 4f̯t<G72~SdrJ? r8
+endstream
+endobj
+492 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195623-05'00')
+/ModDate (D:20130211195623-05'00')
+/Title (bmnum.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+493 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+494 0 obj
+<<
+/BaseFont /ICBBUB+Times-Roman
+/FontDescriptor 495 0 R
+/Type /Font
+/FirstChar 48
+/LastChar 78
+/Widths [ 500 500 500 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 722]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+495 0 obj
+<<
+/Type /FontDescriptor
+/FontName /ICBBUB+Times-Roman
+/FontBBox [ 0 -14 707 676]
+/Flags 65568
+/Ascent 676
+/CapHeight 662
+/Descent -14
+/ItalicAngle 0
+/StemV 106
+/MissingWidth 500
+/CharSet (/I/N/four/one/two/zero)
+/FontFile3 496 0 R
+>>
+endobj
+496 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 758
+>>
+stream
+xePkHa~_?Ƈ/uZˮ(RT˴>ӭ5/SV÷ZXK'ݴ ("~QdT,?wD?s8y<QbJjŵ쨶%l6fsX@=H&mNľH@]ӡc*x!cw|j2e,]i2@qya9j6OΏm!fwVdժXR] Ut:ɋ3,1syd\"I&[r!RdZMGzd@"DS^<2_2P$1
+endstream
+endobj
+458 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [318.186 661.47 334.118 673.16]
+/A << /S /GoTo /D (section.2.2) >>
+>> endobj
+464 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [508.714 475.669 524.646 487.359]
+/A << /S /GoTo /D (section.2.2) >>
+>> endobj
+468 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [150.415 78.626 166.347 90.315]
+/A << /S /GoTo /D (section.2.2) >>
+>> endobj
+473 0 obj <<
+/D [471 0 R /XYZ 71 735.4 null]
+>> endobj
+470 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F21 333 0 R /F34 445 0 R >>
+/XObject << /Im1 463 0 R /Im2 465 0 R /Im3 466 0 R /Im4 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+502 0 obj <<
+/Length 2145
+/Filter /FlateDecode
+>>
+stream
+xڥYms6_P&
+8HI%],HS2m#r} &I0ysk'<`ij , d6\zo>.>N})'ԏ;OSx޽i6MBlHovAtBS{o߽r쟧Na39yB'r"e O& XRa̽y5ak T-zm\IZ sK/Yl
+]Kum&J MMc]4ym杖fS iw]C%Ss@7hƟ;n3x:27dz7M^.iƪ]kapB\ۨ ҽB} +l&kGhL۪nț;wr }S'7CUUxc]®y^%64wҭ0+zb Xp0%,Hz/_fK.1P1>acjcxuzL OY*N6*Sb
+_QzZBssZϲq_R2|8QEM麯YV4\5uu3;VT7
+fa!55i<?+=
+ A"~
+1PG݁!%'Qzw}if$KIgȝQj
+1|H
+
+d<'JTw .bAH@5
+p;?ngB%_mAMny
+]ٞC.8u10OcPc<p ]h4dC{㖇jx t)T^3(7C9*,
+ A(Eu4}7?rnb0K&ݒƑvQ4h^/Av'
+s7wвglx-Jv ?mI yl:3˼5V|N$߸ [Ɵ+) |y[_ Sկv7"_#LG#waޛfnr$۲N;WdϨmoh7Y܁qROef#
+endstream
+endobj
+501 0 obj <<
+/Type /Page
+/Contents 502 0 R
+/Resources 500 0 R
+/MediaBox [0 0 612 792]
+/Parent 474 0 R
+/Annots [ 469 0 R 499 0 R ]
+>> endobj
+497 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./bmregex.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 504 0 R
+/BBox [0 0 480 97]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 505 0 R
+>>/Font << /R8 506 0 R>>
+>>
+/Length 3952
+/Filter /FlateDecode
+>>
+stream
+xZˎI߯$dds$L
+U-oӔY.ّ[hY:C=Rrs:3_yRف5GbaeA}j8>B" {V|I3v Sµ +F ?$RL9[3KoB?̎~<eEٺ,(#C?ߞ" #2!RabmTp\Ñz\Sq96$,[SGp Q)D L'0T`
+L\2n Wi@*,ӰߑD?=,
+
+!/<!WXpLW˚"]T W-Dh$3(MrquM@议;v[S&BȎ!!%o:SЎHu}AR+c*Ə^POA$"œͅA]
+d" {86:މFd >EPŰуr([TYhBrļRU#.*|Y-re &r(/N(]iF ^Q8>cT)IqK6+zL}p
+uؾ NtHb+ FnXtʀGJU/P1"Ip-[;ӭ < Oȃ/#2W;4wIp:Rh
+.(YP^ RGkO 41>)*5gFAfG8g^tկ Aeu8}c6PaT=Ӻ.l\pDAL6RB Kͳ=^`_h1nT9vov3jRc#cu NQABYU@ ԋ#-!⨍ בHX@P~6bΰl)
+\SY$
+-p}sOtKw.i'
+3 C̵<+;G䲤6`\nAEs;]zn"Aj-rT5l;2ShZ?Pp3 d&Lm;ddr&A,vvʔR=rp}F^-y lLY3!-@b)rS@!قoY6Y a4wS}aJOgC5UfW ɲzdSe#PU L@nU/fyU8 >\UP,zTJ H TH!bEVcٳ!=59{ؙ&ol}3]R.hE͏? ӹs89E;6 <;s&ޟ$ pMNB?a4΅<@ W`lӸG535Ife
+hSqk* lZiW}C8ä@+>8v6[h
+TTuvl]xZW!fv@HnVDKgrhҺMk=;GBU۴o]}Pي̱/8a(C;
+;!SC|ʦ"d7\|tBK Ɠld ?&]Q~I']7]Q!]o
+#84t^_?H
+endstream
+endobj
+504 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195621-05'00')
+/ModDate (D:20130211195621-05'00')
+/Title (bmregex.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+505 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+506 0 obj
+<<
+/BaseFont /LSXDFD+Times-Roman
+/FontDescriptor 507 0 R
+/Type /Font
+/FirstChar 39
+/LastChar 122
+/Widths [ 333 0 0 0 0 0 0 250 0 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 611 556 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 500 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444]
+/Encoding 508 0 R
+/Subtype /Type1
+>>
+endobj
+507 0 obj
+<<
+/Type /FontDescriptor
+/FontName /LSXDFD+Times-Roman
+/FontBBox [ 0 -14 707 683]
+/Flags 131078
+/Ascent 683
+/CapHeight 662
+/Descent -14
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/D/E/F/I/N/a/b/c/one/period/quoteright/three/two/z/zero)
+/FontFile3 509 0 R
+>>
+endobj
+508 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+509 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1661
+>>
+stream
+xmTmPSKr.D%M$uZZďZT(V H$pC0Q4$, ndV;v_UtgԶ0Lg;9syy<#HL(Pk4^+r :D@T$4y!b"I7[oP+U5dk׭w;HsFR'}T)4zV*Nk4Rڠ2J'N(NĮk]j`WIdnؐ RQo|}4O*S(MyFX yqk _#UījD6C&XD,!!=b1OԒ H39W
+1QktqK5~
+q#!8)t_zPvQE9cpM9y5tSz :i'h,C+Ѣ_߯<d?=YGc
+endstream
+endobj
+498 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./bmrange.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 510 0 R
+/BBox [0 0 240 58]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 511 0 R
+>>/Font << /R8 512 0 R>>
+>>
+/Length 501
+/Filter /FlateDecode
+>>
+stream
+xTn0 ^Z H(.(\Aߐf(Я/ectXy%=CD؟;]ݽ%D\P43pUTp-Ȫ4`A#eLȨ;텒 x
+ґ!i!8jQ90O-PvN!(Tbm2ԠEʈDĄ9ّ[cp1)
+G\3},8e[;G\-L1cޛZFؑ!mepc3 F'8pol;@6QwgyNw*os j9kt_D5nzGxױ<Xj%4e:#U;ȱxS
+@h&փ*EuGo+%<y~+|8l6&kCXlJHb <_M|w~
+M2TL}GOf@pHIx7s~B<9՞6
+endstream
+endobj
+510 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195625-05'00')
+/ModDate (D:20130211195625-05'00')
+/Title (bmrange.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+511 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+512 0 obj
+<<
+/BaseFont /PDWFGB+Times-Roman
+/FontDescriptor 513 0 R
+/Type /Font
+/FirstChar 39
+/LastChar 122
+/Widths [ 333 0 0 0 0 0 0 250 0 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444]
+/Encoding 514 0 R
+/Subtype /Type1
+>>
+endobj
+513 0 obj
+<<
+/Type /FontDescriptor
+/FontName /PDWFGB+Times-Roman
+/FontBBox [ 0 -14 707 676]
+/Flags 131078
+/Ascent 676
+/CapHeight 662
+/Descent -14
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/I/N/a/one/period/quoteright/z/zero)
+/FontFile3 515 0 R
+>>
+endobj
+514 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+515 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 934
+>>
+stream
+xeQ]Le~?J̶4T3Yl8':g 2L
+S}4 ykxng;ihpxxT0FсVE$ tvWfvYJRsC~(!T-Nq"bkbޝS7]ryKa@PJjTD-/o4*d p~!#ߑd@<Y*ǁXr`1O6}~G!!Qp8_;AO'H]Bk\+
+endstream
+endobj
+469 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [98.277 661.47 114.208 673.16]
+/A << /S /GoTo /D (section.2.5) >>
+>> endobj
+499 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [246.5 421.342 270.917 433.032]
+/A << /S /GoTo /D (subsection.2.1.2) >>
+>> endobj
+503 0 obj <<
+/D [501 0 R /XYZ 125.795 735.4 null]
+>> endobj
+500 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F21 333 0 R /F22 376 0 R >>
+/XObject << /Im5 497 0 R /Im6 498 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+520 0 obj <<
+/Length 3465
+/Filter /FlateDecode
+>>
+stream
+xڭk۶
+unԢ $Ȍǵ{9;θvj_t'$N$JR>mۻ]PX,`4WxR4HvC }lw݋ޏ'RJ/axy+lUއqDzWo/r<w^aO^KTEb@4@|2 FBR!bODR<F޻; .<SeMYAQG)f|00|H 3XyrYbN&Yrk6T-*TUmB=nrE-<,3uC]
+}"HLS1ғcH؀O1l@AJ|Wx
+O]y 읦q]BXb˾9VD4y2H@>ՈH.gp
+\+<o!> XYղɖd!WUeO~аu(N3I-N1? |%9~O~Wx
+O]y ?mk?k7MG/txv@N1 $\+<u-wq,n'XC9>L2 OѽJR8$>cU*}Xi]+<u-wHuL,cz?E@,CCֻ3#InH =_ }Lqq[*oJv9d$6w~ofp-4c]Pq+Ňk9斵J~wpi`Ϭzߚ9 ϒM5yc>|b-`^+i
+MJ@"᫔w`9DP|bŜa2@E}^^ $ަ6CI.<(X̐*MJw{3_/3X~u67T<׿ kG޺wR
+]S SYeSZ䅩Dɔımf`Y"wݭs.yaj{_-`CQP5t%.<^ S^cCYd Ƭ'JULYB,J{eUTϛZ0ۗcЧ`"T
+ocaa@@ƒ_ρP}
+.W oU>|Jă[.l D*ۼBЅ;)׉+O_18 *~ \l͜U1dH ;8CbHtS_@%+ŠeUbB=i4,cw-a>%r%A1
+tfC?T+J8/M䆤aZ x7։em}
+s?f]e32 fTo0`aJB]+jRa3fPFDy "#_Ϩ©ISZ/T CU䧠AKD
+Sm6f)aV;N
+EIUY '}rѧ-?$٦13]tVh+
+m vl'{ ,ݓӛ.ӪaY=dN"ul!jrC`5h> #Ɠ|PpCհlm[$P¦`5[DMI'¶r$nc2e[hh /26Hhaa1y7WިXƨ.-&)S`6}1j97hT#SٹO pG-7#Apd CE*sa$ጟ+96 3OJSDfڑPäqL]˻lˣ<+qcF 5Tjo\@޳&ԛ' thOa5)w*!A;m.f]'v^=;:4id)uw>, Q,|pbjйT|nƙ!OemBױ?=c˜Y{נӌv]`j}Bgyawޯ9#. @Ip#,D AKjO1?3ìAqv-fYew}M+ռ׼5f3%.2Nkzdf788tN, =o-|LH F\dwsUEV֟yk- d[teȵbV6{v߫`A
+endstream
+endobj
+519 0 obj <<
+/Type /Page
+/Contents 520 0 R
+/Resources 518 0 R
+/MediaBox [0 0 612 792]
+/Parent 474 0 R
+/Annots [ 516 0 R ]
+>> endobj
+516 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [71.004 53.433 78.451 65.123]
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+521 0 obj <<
+/D [519 0 R /XYZ 71 735.4 null]
+>> endobj
+62 0 obj <<
+/D [519 0 R /XYZ 72 702.645 null]
+>> endobj
+66 0 obj <<
+/D [519 0 R /XYZ 72 430.592 null]
+>> endobj
+518 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F20 331 0 R /F34 445 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+526 0 obj <<
+/Length 1370
+/Filter /FlateDecode
+>>
+stream
+xڍVoF _!`*oӷ6Kmnl WOǏ'[]Hydl]#
+,7N/8qk{}܋ e{azG7p7s>Z|V$cqHS4 )/_$E%k-w
+ą{eC?cڹe=e߲U;UuL=UXv[6[tۑIOj뮬ԚW\ veVۯy/6K: l m>"g}[Uq2 }3qER
+fȤcxg'oDAHg^ь~E \e-@-U) '^F3 .YF=ؑ'g Ƈ
+ ,P!uox
+
+%բΜ7wDZFfhb6<"JR?q(\*+_+@(!a% 9(G )T"cSiF!`H]4Lstb_qCS&4.hVeL~\UcMu
+iUtx Ft:,4'^ E 8>l9}P
+?~FdG㢪;[c1^*E-bt
+endstream
+endobj
+525 0 obj <<
+/Type /Page
+/Contents 526 0 R
+/Resources 524 0 R
+/MediaBox [0 0 612 792]
+/Parent 474 0 R
+/Annots [ 517 0 R ]
+>> endobj
+522 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./opor.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 528 0 R
+/BBox [0 0 134 117]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 529 0 R
+>>/Font << /R8 530 0 R>>
+>>
+/Length 3469
+/Filter /FlateDecode
+>>
+stream
+xZˎlGW("!6Wld >Us%,/V^ӿ<cH߷~ϟa?%dzFϏ+)=ٞeP[y5ÈYu3~{C+Hrϲv8}$Ds;vacoaY?y̼B9W hw$u6s\ϙp8P<G_+ƑB^w3g`ŖuaM09oI얶g=Tsnzr&(-X)RܞRMyoaV7!Rx*tl0;6X`c,w83g
+[7W1f&4#7)\ܸd͈
+N5T,suc3wW=^bArz
+㵕K+sm|v&l N^߆%5)XqNڙaw_UxSlKqZԫ_'g=F,9^KгMkwvxU2rdi5DEf^9W3c`}ծW
+\3 _ Utm"c@&N䙰#l`cJy$#f{|c+*H\Ú=6I m3g\/iꊽC떘=vE[YOP7 S!ɥo@L.{9}awƾUWmAJ|rV}W
+7%+]0c[jH2
+~CU 8
+SD
+ѻ)
+R;[LC$Zo$ޓlKehsGR꿘<֖pEKc@ڝ LpGMFKPhԒE,MH5>*i<uts LwDАU|kİ4$R;l#J5A<zQ 'GM%T:7g-}V;UϮSNw咭Z4:_Z՛fL Xip6Pp,|csgEZE9n8oXb,`N>j\ձVzC.58R\F
+U1
+|j{hwqFb.JHحkh?bqZB҂ݷb vjҵ4图ݔnXvW TROfwno&h9fȂ׵>ɚ̈́jq
+p^)N]J)Pڲhj fS,zG\>$!נVg:!AVuW[wE=4iiJ٭zv,V>Y] a+!1HK X j}0V0RCM.Fʪ6wO0#(zvz;#9W|Ѐ,7B5=#flm#xm_T$RyKz^*9A2Q$XjcԾ39XwNw)HϮ#Y4(j5V4_ZuAZp<N?L?96~Zȧ<F4N=K/7q:|ĠaQ]:xKf$Wi#[c~*$|:i,Ұ߇H$F&m9a& >N< K鷳Bˑ9;՛
+᦭'+! YQW|ҒNpBAJmtA ڲa8Taij`5՚i#* ߖ̮]~Pc\A7v|bApSy?#9>^/T,y
+LJr?Bf$|؍/ۢ?}? ]
+endstream
+endobj
+528 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195624-05'00')
+/ModDate (D:20130211195624-05'00')
+/Title (opor.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+529 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+530 0 obj
+<<
+/BaseFont /UCBRSY+Symbol
+/FontDescriptor 531 0 R
+/Type /Font
+/FirstChar 101
+/LastChar 101
+/Widths [ 439]
+/Encoding 532 0 R
+/Subtype /Type1
+>>
+endobj
+531 0 obj
+<<
+/Type /FontDescriptor
+/FontName /UCBRSY+Symbol
+/FontBBox [ 0 -13 427 513]
+/Flags 4
+/Ascent 513
+/CapHeight 513
+/Descent -13
+/ItalicAngle 0
+/StemV 64
+/MissingWidth 250
+/CharSet (/epsilon)
+/FontFile3 533 0 R
+>>
+endobj
+532 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 101/epsilon]
+>>
+endobj
+533 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 586
+>>
+stream
+xOAw[FƘ(wS11Vllbvw Nw6;SE~b#hH`^H;pd6Goo~JOQUXM')aux#JIY~40yoOyk :~Q+wB<9"vp2$]zB`b r;~F_.D!,h$:İ,.I 20ba@f#KȮ `#'1`)G82SN2F /Mjq*Td8e9HbF|H5.RjL4?װŀq l+KaJһA)1bL6q^Zǜ!b\ Y gd;\ j)"EQ|ڴQknN|>خlն#1ӉA/ѵj$>v6>U 3b׳BQ˫+<74<揝?zp1tl.?[X̼,r]%'F(EG0“cx s#:۳{Z[j9) E 
+endstream
+endobj
+523 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./exor.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 534 0 R
+/BBox [0 0 670 307]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 535 0 R
+>>/Font << /R8 536 0 R>>
+>>
+/Length 6629
+/Filter /FlateDecode
+>>
+stream
+x\ɮeQ߯8gu}3 $7 Uo`zV%D v3rŊOί#׻V^^Cһ2w^s1ƻ5.IWg#Ǩ_wYc<׏{ZKey޳_~6hKRzʩگsz11A뒌-k9#~\ɵ}xwenvwI^e}C?py޻-]ẃ!)̯3B)=FX"Vy>bw;eн#Yk9X{T7w72jQ{cw#F(؄z\7wU\-bûkrϗf^Ыz݅]
+\s \-bx
+s8zOv.:'m3&-' <Um]uM`4t?OwV}GTзࢍ:A4\-:֓m gxq6:jRך$hZTb1[(liXGqjxMdk
+mG:Jyh2s
+!ܽ:+8u x
+
+OU
+&Ѧ h$&P%$ChGq:%
+Q&e!;3 
+p <BغB2B
+WƑB;)W
+qԢ/FSCQ/\p W ɹr&久\U^ y.x)aZՀ$
+Vքf7
+L%Dv÷aAI#Ȥ ua )5OF]<d`H >3H
+r{wt\|FsEU{+d%|
+^ĉk띄zg~8iTw@gWHBgܭ$ɱCbWas|40{Yt, ϴmDC R9i{C~2N Š%gjNf iAACUC "GS$]\b
++c]BS_\-]o!OH_Dalɘz .tlKXN G
+Is$ ]finZPT1HZbM%v2:eiN} 6y@z^8Оs]³&b pѠnk׌-("3eV:g@o9N
+0Sֹ|-d,K$o!Jђ0 Tӓ`|x[}=J x
+IX`(Ns}䔃#~X-yѡ/^Ya},4Q0cS;A!q,§"ևN"3BԺ&Cc{쁯}'ʃ QyD{zО7:{ og;P %aT)d
+'&Tg}F`rz ˬu IkKf=^~&3̋g~j (ðoDE-tz\8@͟$YG]ɕ:$od=#K@-nܝ dNp:,iOI>69o'Z4B寙sbVxmt*L1Grjcm0achc[Un؏ H37x}R9sgP6W:@Qܦ&g<CZV}s3S 8r!g#Abܒj `%Ps#Ȍ{vNV;{ds3gN|I(nd i&͙$2ѧcX:7g_#yN'xe V7"X|w0( phIꉦDWZjוM?lKV>\RBGu^ 8bJ+R.Î(vS\ le6.o0M(V*FTd8L(WsdlDŽQPWs AX✨Bْ(]sɅGv]Fuho-0,*?cERTdz.*-qfM|L>ƹJHXK)MvVM8@3nqݳW"Zp$~fAlӌȈS{dUsjR̮8
+̏Z|+3\)&)Q&{01ũ~vbL9 $21Q0s$4M)rRg.L/2,*J1XYQ,W5gBKTcFR9[f<986' XiabTe={W94A)3`XQP^ n2[gg# #q,f/D\T5
+P2+!lX=*؛?`:U8Y9֙E& W9k(%=hD2K> 8*rL4(1R?& \AM]Yb%s"
+RX,{ղJg9vld$Kb^)0"QTKj=x@V$/Iɏ%=*.[2w?`J[ fl2Og!Y*LLx˹^۔H~=+Igb%>R!^a#fJN*"yܡ +] "+76t3mgZdYͰ\+ŖY;y.g˼/IG 4' Gkj4-j`c]ֽ,D|eZ*>o,\C٘AOKauб,סd15j/@d1|pd&e[˜ CЗόt@fNEe؀ѹ̈&avݮ2$u +tK:vG`n:R ]̤tÍ6
+L&Y-V
+ Kas] ZUu0_R,E}O쌿İ$PGu&\ofGA0%_huxƇsis6*=!zN },@;p[Sv[X^2;?ST+ݐ
+endstream
+endobj
+534 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195625-05'00')
+/ModDate (D:20130211195625-05'00')
+/Title (exor.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+535 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+536 0 obj
+<<
+/BaseFont /PVBRMU+Times-Roman
+/FontDescriptor 537 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 250 0 250 0 500 500 500 500 500 500 0 0 0 500 0 0 0 0 0 0 0 722 0 0 0 0 556 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 611 0 0 0 0 0 0 444 0 0 0 0 333 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 444]
+/Encoding 538 0 R
+/Subtype /Type1
+>>
+endobj
+537 0 obj
+<<
+/Type /FontDescriptor
+/FontName /PVBRMU+Times-Roman
+/FontBBox [ 0 -122 707 688]
+/Flags 131078
+/Ascent 688
+/CapHeight 674
+/Descent -122
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/A/F/I/N/Z/a/comma/f/five/four/nine/one/period/quoteright/space/three/two/x/z/zero)
+/FontFile3 539 0 R
+>>
+endobj
+538 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+539 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1978
+>>
+stream
+xeT}TS$^o$k~*U+jJQ5HB !$@$
+aV% XVILShBĔu6nN1Rcg_xID1%!O,"6S %&pBHL!Xm$X-OȈ^r:Lk\!:>ok'(K=@achKrk
+jUG-x%oEsgC|@טi(1%U2XGa i )C>} YN(\kT:O500
+l0NWa}W4y,4eӖ\Sq&PO4
+
+@y1NwNJ@+q&+
+הrvN0 8~ M+0 nүx6$ [sn:& 2h; :Ol_6OK :& m/xE_sGP׬l)5&/{hyiM{Ƚ0 ۚڼV[em]\Q_YS/-JmƢC2ެ
+Ǫ+2.Zmu#89JK@I-.;V
+t$zF½%y(QaMQKOPw]!"
+s9oҜ <֠VGK|h0pp68m}A,Yzr,2u8dٰS~d4Z@ AA.4L$@I,ꦻ,h5e56nJ;>ޖy K%-W1)ae}c祂>o0^@Nϼ[:ܿ0| h.1'.qJH\Ut/< [p2kUM͗fp⍦!o~ 0XWMН$tm`oCsӴيt^ @`ꎗSwrOps.Bxh_H.<TmDԟN~ɪ4YʌvMWOG{WOVJ` ^@ `wcjڎ2L<`4?&.4~zZd
+QpswQ/W>|gݑTQ”nF[;yr#q /x{p8H6!QUYНK剿ZT-F9':AMp\ѷnF`L}Rc\4e>vE-`nXR6i8Kav&!x¸WKSw8n<"7<TUM99K2
+TR[yݩ~Snsy kWV(ݗX٢ j?9yx
+endstream
+endobj
+517 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [200.64 661.47 216.572 673.16]
+/A << /S /GoTo /D (section.2.7) >>
+>> endobj
+527 0 obj <<
+/D [525 0 R /XYZ 125.795 735.4 null]
+>> endobj
+70 0 obj <<
+/D [525 0 R /XYZ 72 647.201 null]
+>> endobj
+74 0 obj <<
+/D [525 0 R /XYZ 72 123.228 null]
+>> endobj
+524 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F20 331 0 R >>
+/XObject << /Im7 522 0 R /Im8 523 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+544 0 obj <<
+/Length 1515
+/Filter /FlateDecode
+>>
+stream
+xڕWmoF _!`",ڰYnkOi\s-Ԗ\4~#ϖ_vHx<#0 _( 0be~EljWT޽t&E0e¿]f*wtWӅ:
+yfwwůQ26'YdH6#Bfn& KrڨF8 ~>NEg~'\Hݠ]KS^v.n3T-n+9:#o{j uWE2HbJ8LܨJUiз7u 7UVP ߆Q 7jԚ{ 5+eL2CRTP7ؘ ]ҊղeFnfur@ ҈+Я s p7{2H,3WDL
+<`'8Px3JwrQ[s^A~a!l vXv5 ]:GE=# y Clظ>XDqG7-:@X9 JW@Dmx_WaIs3IϜwFM<8ԝ>+uSiv(rv ǽqk[MPЯHcX߀}2e^cݼ'0Vhy*Rlp?!lxJ25"v*WS%k=HQ|L޺ FAr<]
+z/O,lUIw9ֳAVǟ
+OFgI3f3]ks(v$OJ_1k
+endstream
+endobj
+543 0 obj <<
+/Type /Page
+/Contents 544 0 R
+/Resources 542 0 R
+/MediaBox [0 0 612 792]
+/Parent 474 0 R
+>> endobj
+540 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./exinter.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 546 0 R
+/BBox [0 0 672 92]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 547 0 R
+>>/Font << /R8 548 0 R>>
+>>
+/Length 4536
+/Filter /FlateDecode
+>>
+stream
+xݚ%;R)4e$P>uj0@V] Q ϵmg8;\o_޿Jj/Ƹr5Ry~;~ީ^}t?{nsy{|
+^p=~{7.hMQo?\=T?/Ӹb<6XZzǐt_뼟zWKψV`/ox<{Uk߱ѕ -^]p7GbW|ֹF=[l.3!i +cs )Es{Pf<
+ڜK-^}
+eH hH#)'Od̘j^)p=]Xa=w0c!
+?oF/K{,Zkǎ6RsB̹Aqy?ɽ>#JYa=w0c!P^`~~f [ 3G9F
+
+ r87 ^etr#e`~o`B\
+<LYB#{w{k=kn;
+ylFG:N8!>$^ !(Pz( ޜv6pӠOt ޹% XlTY#X'C 1aTGWW9T2[cLKbKBQŹD uc_BPoG26m^"1CAu#˱쨔L2{vIȶti!I. `:'=0HbEu]@fljo7NB=UHn(Ǻj@,>@L*FW$ C!YQ1dNCpsX#ۼfɑL"O^v4OqCE/;Ёc{w~xQ`N:WYwjӪ 8<AHf 2j)'.8`X|lDdi.Nm
+^t Dd&ɒdrh$=O@ VXc .=n<96}L3ʄzyމgeϧY$$ ,
+'-ndCΪ|y07@KDcU,=c[|*iH ӣTG74
+JDR13B<aʹ|z;h4/U:6}<)Q!c8&o_+z>oU99u7JjŤ ]t35be7AZ0Bw`\.dRî9$ )AGԳ(Va1%
+DqO$R͒ũB8pVIRT}PldɒV jj-Oyт$iuAě
+,vS7tҡ,l${x:Y>"qB@Tqځv`rX'Nv-WE_APz>Es2P&B RmS *yUѡIܚ+,澖iݮqޯn%Sղ#e&&.:&u.Zҳ9hj֕*<e5a7\]jɤ7%riTGOYoͥ:Ag@Kn4ٖ]4?_<yfL \ loEIp]K%Y >`-B~e[0Kϔ vCǃ|S@Lvt&&{ݶ[I79fNcj_UH&eN?\SZoB5r+@SJ^P&oaL,v0ƨ.ȋ&qFoME*4]K^yd qqv#nLqVC-gI(R":,`Jm:BOD*se
+MYR/wls_剆RǓAپ>VcQDDXbUzU͉*I3DЕb^dQ£Pa#(\54 X='Z|T/gI]۴S(O"ZneO]ge-Լ$Gwf 6+)W=N@Vΐ|z֎{=2
+UչD衣#wĘ~(ޑ=9kTtS&K,ZY;C<W]z1Ú.'$Ib{,~Q] ]sD&#!)=hD//kuMz#qNdZq:m ,_tߢ6ߌ3#Y7WzX
+Gcc;n ,}CϮy$N&.пr0M 5FMIB~MRB}0ݻU`.)Mdk#`-&ik*`Cn.H>3Bbn&qdՋ%l;"DK_C@E> |_W'w ,Hm1k{;R1DH6^(duv)}],aV8.*;qZZЌ9$h
+?s@23ч' VC'p]{n2'x)݂ S;.P9~)P>#YTkXuݐOH!ЮbjpJ 2;BqP!'{wTᒎ)NN$Q_'-D#D6/jI0vB^$lw&Tzu.τ ղf𓴉VSAI5{;~٩o eCχ"fT( 
+Q2<XPrEgJkKݨID\1Xm <-VĢAz`\N1?+4(%94EG][>ػt. VVGR8 rQ=Cv3[A|fÇ GլY#оpߦը)+G{A&y|TW<CVTL~u$"w9X@5!uFuG5M˰q _Ej}"ŧ۳o.W߾媙=_o}m=߅M8:{Y?%@ciDϤJ??Od{-kP/sցK?GglԥQc~R[Ur)__¿^
+endstream
+endobj
+546 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195622-05'00')
+/ModDate (D:20130211195622-05'00')
+/Title (exinter.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+547 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+548 0 obj
+<<
+/BaseFont /VMEDSM+Times-Roman
+/FontDescriptor 549 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 250 0 250 0 500 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444]
+/Encoding 550 0 R
+/Subtype /Type1
+>>
+endobj
+549 0 obj
+<<
+/Type /FontDescriptor
+/FontName /VMEDSM+Times-Roman
+/FontBBox [ 0 -122 707 676]
+/Flags 131078
+/Ascent 676
+/CapHeight 662
+/Descent -122
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/I/N/a/comma/four/one/period/quoteright/space/three/two/z/zero)
+/FontFile3 551 0 R
+>>
+endobj
+550 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+551 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1266
+>>
+stream
+xeR{LSWK{ *^37EEQөȤ*}ٖJXVZ,0h#my M7aE4!ٌ3jvvbsrw~88DA/ύx͍A
+&&pai ,3a X:FӾ`,ר̢Ҭ%KY(a6+LU.vdSzEnZfSN9ȨtF(r=rBl4FY)Y"1NMΙtC
+H*N0Grk¥˒V\aϰLL701A$,ۈM :V /fa+@O%?!$i~IiK~2 F(#ަn^Ue IѬ61A(*;
+*! "N{;ۿPZۂwumGrxSgZ.~}*w8dg+E 8Dd7B}+7Ģ¾s x'hrg!Ԇs7 uC~(t9]8z*m%ƹP [P>#]tN3~sYTǎ`RYpFB<V]2`ႿuD)=.3W9E# hoϩh/Xబ['79撢&>5|~íC 0D]RW
+4VK OM 
+@>Ip>'v,U
+zOaHLD
+PҏSE6XlX#ow? u m tQQD`dVJ7̟ P²4]/ &*]
+endstream
+endobj
+541 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./exsubtr.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 552 0 R
+/BBox [0 0 698 256]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 553 0 R
+>>/Font << /R8 554 0 R>>
+>>
+/Length 15768
+/Filter /FlateDecode
+>>
+stream
+x}ˮ-I|Şe0 !&HTlRn ck-طv"<ie˫o߾~ןl}Z{߻ooFi][}5Ww/k\o_z|{l߿}]Lեl>e٬q??_|ղ=f{9+Zko_ַuQFo+j{kw: R]O߿}NiQhhc{YYU׈mgmgz׫ė;^_OֈVRJ|E;+޷ڭrᯁo뉾up~߃;>*<-w ?16t 4Vc{2|C(q
+ibo5;:|~DZ
+'FoүxPVFīIz-|?3:}.)`tފ/Z̊?G] _z#[~ߣ;*qZSo\o.{nj-V6˷Rc~bWwke`-6^`5R&Wp~7C>_-xz|#wy>Fw(wA;7ơ4W ŚGiqht>:7CXݼcSu%μȟx^VX|/d'ë|K‘Lu-/H^qZ8/sd:Hs.v1N'/y M硏*1?1?oVr=p~CKnxaޜx M$)FHK7#1#Y1q7#H6q^1.>R[Ӝo>r=q |7O6[RV<HN5C$pXCiE-.c C'NO "w8$st&MtLw(ȻsclXچ?(ZJb%g%`l}G8c+0Sw:4HYh?D GSY-cI
+2}GYٗm܃%
+C=b*=P̡yeW{(1NM=%+)ԟ=SfNlP{院q
+3Lܚ{[S8Bj̘‚.cR8\*VbxӃ[?IśΘJ1 @َ ~ñDђZI 3B3!/ks291rok?ފ#8?[Uܞ_ƶ:9eh9c"`r]q?ucKuiz)֮ytsϙhz)lWRPafD)WP<OgPZ;coz&;ǻN{ս *Xr#ԝ8Nx^/>ΙKSqNJB\-K| L6׳TjLiOU`el;[t4I)x:(
+)>o@.N,NM-\I1rXMa'b-euknkE
+߅Z`_殺mq#cݙ|T߃wz#%䎞i8I^_, w0l
+b!^^Z2 փd[rЕ`~c;+z316Ѭv&[ܡޛݱ8"OIv$oToر$pٰiR=]1
+;CHA 9[E5jǧ|=P N#W:z=9DLo#%rxyO|/v-/e7k4jmƖp."@]tPmsVQHv!ɳ ےh/ 붂KڃöM"*(=4җo'-F[!jkON]AidL6v_p;{yq0ՠ쮍Ԕ^B)taIqmPeJTza0ۂ")Xj0 .ޑF>T-f 3.u7Lao5H){qatG(u
+9o
+=m鱔 _Cl8<5ޱ:!
+O@CVтk{ijCNT((]#LA95]<l1(
+dl+\cT@qʹ ]8\/KKid<buIō<b^{~y<bq]sP^jxRl:
+hI%QIB2Y5K!
+"zDogP몯 5hS{hI'tL&\/,z)M<pX2%"F]/()͂q,r u>r<4U!p--as<<xҜ<!AQ~8%(: [陡!>`9})MCkI :N4靪2)gӐ
+ϔ%ni
+K2CNi
+Ej&B$ހ\A][,ئSg%q.Ӱb@ ,Wҏ@P³L5(G ¤n H#P܆aq/.̩]+ g6tH{ mh"psa&t]όӛ%鈵u&f' [7%bD;0gVLA h٪m;+ q[[+LfomP ȯL=7^$E ]`0h N CvV)?C`Wv$ĺ o**-sl</rօG$AiԛoUaNTR B°7`g o:|.,QeDGe) 7)b:Y4~b7tw" Nw]ah8$?(g4or rH/ A8fNa|j.3 Sx,ABNKvp6ɒf<S]DS & f ]<. RP u0Llwpt o/h|P'r[
+[ۅ=?!Wx](ƌ1l)4Qкئ
+MAai|'L f<ށ 2r8%>so9 { +9Hh8-F5 
+MQp~ <q0[B.k@:;3t}6^!ê$e%D| FRb,Ҳ![?)>ѢB+͟H5MeYR!`sZ# F.ݓh<\eCTA)\Fsӷ [wݻ:'{"Ľ`I 7={Bzw0$
+o:mg_B[eد05g4q0`^`./p
+vqTtۚJ#
+Ұ4Y6UR=Dbds%>D#7~U
+*I}Q 3Kp J
+M
+ Xҩ2(5CVwO!,W+p  0[?2:I~
+a~f ;a KZq5e)+e ƆX~AsFc#p7y`AƟo_ap8BBPZ1cR
+lrĹ`DB;8L"{RP(Z׈6#&u#mYy)ZĖ8ʐ" O OY} 7QdeR'xР*B  8&ƅ EO|r.g°d@ܴTbnqz`ܤ0Lͬ#[KD_\T7B|]% PAȅ25TM1B
+[ nN0*܉B*pq1a@ܥ h'Z|Hte,KJ"V*a-F0{Ǖ ,b:ZZQ-?'fU# AE25?T ÎR?Űù!Be:QXA2R &P⌨U3=Ԗ}%&ԅ u*:,NӅk[j a.p
+-g 5B䕓.C L|\8(pYhsB1*Y1gS123RIX ԥ
+ DAycң[2B f+B[pzfIPP?X N[!CΠʈe
+B
+k<ܺ
+k(THKW*{JM5`I71fMt(.XBp;c%?-J=vS}yNY/ti&f,IL'4\'} `Wy3]̞=nCN1eu#Ky'%rBF;+|J=F[z' IHIWoџB3T7$
+JT{Pzfe `hIw0* ҡ>lJr@AtGKg|Èd-n ?HYxSW\3=eO|?ѣ,FE/*KW3`(23akcjɚO?:(roh$
+q}P-Pe$A:HbĈ
+i0ofA se3=9L9e~S#s ?C<<'r4Bxl09Tۛxns(xzuyB; $e2;:舞*OӷmL.LH7g4+]s*fq{=x!h|Fp?!&J{ hUdX{zrdSe9@1im4{eB_+eJO5p̸[FFls
+bpP (pwiSRཪO]`BD J(9'NhZLƏVXAbȣ2$M{)isIDpAj\:3E-~?*b;wbLmU4bc4iOJ[^B%kK7>ĸчJYM3mͤ4bJ3*DŽٜ3!h2w2"쉈L\ਠ* JR 'ıֱhÑmۃ򐙽:4[ ߅WRneh-Έ7$ 3%@ۚ^HdLd!yAeTm-kŪ`Th<w2G\pkL@QM`r2>en 7.a,1Lά hX`KC, `e$[o3$AScB=!H1j.((Й5%hY0Y4W 'zq4%^YOk]z~}ٹmsLd\BR̀r'ezo\9/_$@ƹTk:e{T9
+bMGrўڶi
+0u2tA- !NCE, VnVSR f#YEz(Ъka xI=1=k
+I6pb/`L*){C %^!e-IM.֑v(~c 2hospK]c#FLyAQ|*C6=$ %%tB>KJtBKnrP!>/b32/RQ[39J!6u`ݕҹ+q]njQ^4 kx$0UX nl2B'JeқKQa[c*޻XP|i""$da01SJxpȂ5-P߃2eZwp.!I&C*Q(
+8TDA%-p
+g4 rC]A:@F :]:8%S;0aZ`wV_"1BoCQjC!r$P͇!X5#hh7,SsE?O@QPg}W ;dM墱b++c"1(!W*ȏ|IX>rOa.탲8z>jtr{zSL`Y&dǓDY7@zS]A1amLP탲{e"H"sQU&(M" E9X!sؓ4Ƀ܏X#AYyLt9 0Bdqk#"Q$]PT{P=v '#gPIwn yQ A0v+UaaLC<2:dzԖB= {OPן,rY6=%j@&[ȖG5"<hZչ;C'e }JRDʃ
+nB了Cx\&X!PLu-ZIɴ>^䆻dѿ]2EWi-V gmM)=̯ݳ"h935]0__QAYxE|}nhi Z"I"(:ַ@^\huٖTp}"ᨃo%pR˧HebJ8D)#Pl;ۤĕX5 ^S`OE 
+TF^(Z #sC@,~f*"L̕hZ$(b֖)
+Q_!%ex))X!RFlAKЕ-ǬI A[9KS)И|)oeV
+ꈢ
+o}&bD_5-#:BHIiց>«(=[V
+l:]ͪD Q[OِS*]e%cˢfW ]%8/m \a;FDٵ!Ls6f!,1cLpL}%̅\{@Ykyv1F,T0Ǵt+@qm{ǰUqQhfe;ޙζ2'4Ly{ 2 |ʦE =+.e%nћ'S|++E2IȪdEems6 jded&KAQPYY +[Ժp ᅅ
+s)f
+孞\#ppl¢LZ}kVc17U'㩭asp#hK2j
+CB%tJCE6JAŦe"kXL
+SQIy(qW9b39S;͐< n'@]*fHar֢"$G 1Q,kܩuLLb!=")O"ѳ@ P:oW[֝4@FJntxS``u'~R壍Q Q1##KfJdzYXY1k4F<,gtOIb(4i[5X2JE
+5,=cX
+UHa\`
+VOUbMtYozZYӘ`Q+k
+$3;k3jRbejE5λ92bgyz8kI֤D^gjP"*4<uUIg08v2
+@,V\c<N`t:s<b z2Rᘦf]'sԤB-kM 8ߤ yWj<mc+c(,=,jǘ
+ s1gTA-^E?$)@lvbsZHXv''\
+åo'Ep-24f -I!HeP3rGT7Ũѡ{P*_sJM"Jx_ Y7]S-\;}Ae.J@/v#8 jBMK
+$#zVwj C#~!EY
+3ĝ(eQ`\^s?
+%
+ֈjDWeQֽPi* fh頢.,Ev.7(G6VY vj^L(`l5+у,Uhp-y0U] l+iOPEh!V^2ƃYwt1/_SkDu.n:`yȴnr|-(K 8Bxt՚GYE,Zt$Pa ā|$-b"]sc=.[Sz
+"v(3 {d0"eʞ/f&ڕIx V[]!J` B D ظM9[2X" ׹2RĎXЋ0S }}r]~)ip.7Ks^C/`]
+1N_jC`$:B--R[b`µ%b
+>c\xZuȰF0' f<ڔuG%5Bw #ȺFfN,Ny`XqBURHAIJrbj[k!3_DnK 5 &Aj祦e+=t#ruzz86A y\!優]2QDc5ƞDAX<`yı+D GWTq)L, to/Ϣ lDz{q\Ëè3R*⢸(!iT!;ӯSMU+/5MJ HMe{cHXX8D}=
+Q#{^Kۋf^|X\48^
+"˞ĥŻ)')͘tg }4l~b4Rh1t{_ &DN@UYWb`o/lfT9 VX<>}޺RO~ӹ뢵;ھ2(ܓsrjڤ (,M(_WY
+_F
+U*Z>z=B ,u伤ͬpWTf
+g ^]vv`9
+M.E|Һ,*
+'ð))s5P@ba2oX\ ;j%c/"^.H,+/|~dej. 肥%|]RQDѪP5of‘37V3D8Tp ^b.scؼʹ(yok:|J!GTw4Wl[f"T RJyZ%ܳ&.lyG)w]Q"c43#@xңB] XN ,3*Kix%T6;{
+*誁:T6d$|Y|[!0&d>"w`?8 g;d&c|ˢqm>`~@ab%s5*
+QSݺ.Zgd{5PL;umy4=n j?퀪W]7ػV[VvA˫<X>ySzFM\o̹͋ЎΝ+M{ Wlu{4u]DH y4׍΃H7Es]Ṣr\ kҴeL&fR.Cާ: z`j(8޶n8/3mp]ADŽK[wk1MZֵOYrwo^Le"hq;X{ c8
+endstream
+endobj
+552 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195623-05'00')
+/ModDate (D:20130211195623-05'00')
+/Title (exsubtr.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+553 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+554 0 obj
+<<
+/BaseFont /KQQDLU+Times-Roman
+/FontDescriptor 555 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 250 0 250 0 500 500 500 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 0 444 333 500 500 278 278 0 0 778 500 500 500 500 333 389 278 500 0 0 0 0 444]
+/Encoding 556 0 R
+/Subtype /Type1
+>>
+endobj
+555 0 obj
+<<
+/Type /FontDescriptor
+/FontName /KQQDLU+Times-Roman
+/FontBBox [ -70 -218 775 688]
+/Flags 6
+/Ascent 688
+/CapHeight 662
+/Descent -218
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 461
+/CharSet (/I/N/a/comma/e/f/five/four/g/h/i/j/m/n/o/one/p/period/q/quoteright/r/s/six/space/t/three/two/u/z/zero)
+/FontFile3 557 0 R
+>>
+endobj
+556 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+557 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 3185
+>>
+stream
+xmVyTS׺?1$8&=5Nv*j zE0* X
+;Atه鹪DiO,:!]p@.SڀW^  g[L~Jʝ!bi&=!_O*,P.T"Kac-[V
+W,)uVل|["??MgVվ[. ]j:
+ OEhgq}/gJ#5Aٹqqz
+kFIՍQpE'6?vTz5 dCCYCSJUȀƽA!^\͞0el;|L
+臒'v"iCpe\] 7r;`sQ]q%<Ϻz}8c/ >׶Kϔ;swzu'D1us`C'o6D2Bw43jU`=Ώw7Cr=yn{>mUN'\};,!hM{,/ B/Pp V@r ^~[~x#ᕖZF5ե7Z /o1(76Er m\A_V,.p!|:i)ZT;<]jBhNJy_(eaj),W%RWI5x:
+JҸ#l
+19̦`uFX0~f xH %K-K V:JJ*RK YUi+HU&G%1P??[/+S_`ɧ)˛,gJhh萋.;y)9wP0A!
+SsAx%^kOhNKdJal7Fnn٥U˖6-[N (g
+endstream
+endobj
+545 0 obj <<
+/D [543 0 R /XYZ 71 735.4 null]
+>> endobj
+78 0 obj <<
+/D [543 0 R /XYZ 72 474.001 null]
+>> endobj
+82 0 obj <<
+/D [543 0 R /XYZ 72 110.453 null]
+>> endobj
+542 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F20 331 0 R >>
+/XObject << /Im9 540 0 R /Im10 541 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+564 0 obj <<
+/Length 2024
+/Filter /FlateDecode
+>>
+stream
+xڝks6`*h E1s6^zs LA;/c.>,Njn/^p~db_G~'nλ忷7o+Un_n.{&^.7D*~zfz۟^ɘi>HtU~$
+4ɘ궭~6PڔAH
+ޮMD1GP[:T8^ygk2ȫnqݴ %w
+~U~|GH*x ,P2ģd%pИ*w<va#_!XQXkdɾ*
+7zySa,TxTmV%L5t k̎Gm_d1*[LjvsWsv qD:ƚ?ءQF{ҍWum]=܆m:]?4
+GY:,*n1'v~"'7b#rZ,%VvrfۙՊoKv0y7R6}տ9e
+wu4J2ϟd~֨8F, Y.%?s>Tq?1~H:j[2 YN,qɃAHh7 [hI/8Uȏ/?IT96x=͆FFmNUl֭w`2Y{0ZJٍ8+8epITTQ?} 
+{k~lh
+˨xqzz}6u$mk,%^9?)
+RIjmkn2@Cx? qbr$Y?cS  *^Qi|j^QoET\^DjFd&Nװ
+endstream
+endobj
+563 0 obj <<
+/Type /Page
+/Contents 564 0 R
+/Resources 562 0 R
+/MediaBox [0 0 612 792]
+/Parent 474 0 R
+/Annots [ 560 0 R ]
+>> endobj
+558 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./exstrongsubtr.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 566 0 R
+/BBox [0 0 587 103]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 567 0 R
+>>/Font << /R8 568 0 R>>
+>>
+/Length 3882
+/Filter /FlateDecode
+>>
+stream
+xZˮem߯8 $R ?I
+婒_{VSU-)6+|kW[O -`KVkOate;".wl-*E8#\³K ()Zfe3]7jd_Q-Gj }m[ML3۳wfθ:-`[HRJ䞟$?At!m'#KCڛ.Y]vWHdΧFLRf~UAr䠒$6SQy#[–|quRKʳwzvZ;md˦
+ϭWvd,S~=R%O
++Fl{-j8#gX6efŬѨ]Fm^K#?}v `MD<2yfN 3-?7B.kf8
+rzsUzhb,!ѕ" U! vh8dz?kD;3 H8%CGyCoHEFP:&_
+I17
+ >CܖY䁘0/$3wL<>0$Hc"j|nPڮ8
+<p)b<R9$|ĭik`5$D{rN ۨ#(l9| S! lL8N210U,1C4#g5TfA0$+dzXofͨBΕ< ƐdLqh5|4fҙՑbXfi8R D>E+8lm:pܣꇕ(6l!Wsȑ7IIyNGƒ@`Wňq>J\ &Յ
+|ЌBFf׬f&8h!}8f4]71^vL#dite!hL#d;,L$4-duRBL%0 Y!
+%
+ͳ0;Z렪)'k#f|L>&P7MQ1aum!HКة0&i ]Ɂ\-jȪ'eW|؀F֣eDR
+#5M ;휁|kgs%I&^H>29.HՐe#";yٵ +^XbzYfx)3+|"~e= BUBy&u'7 <e2ǀ$; ܡ/M7Lsd>|+Y_̷LtSȻt%ђ\nK4vj4V\MA=u^wx09N%pcD'h:f^Wj¿)3N_'l0xm~ ׳+G5wj
+\9d=@L_!*ys- V—!V5Żߺ@UDA VEpfj_e{"^ȩ)Lbd=L)xtq[ ,}raba  x;,lx;,(^p,
+endstream
+endobj
+566 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195622-05'00')
+/ModDate (D:20130211195622-05'00')
+/Title (exstrongsubtr.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+567 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+568 0 obj
+<<
+/BaseFont /RDXOLF+Times-Roman
+/FontDescriptor 569 0 R
+/Type /Font
+/FirstChar 39
+/LastChar 122
+/Widths [ 333 0 0 0 0 0 0 250 0 500 500 500 500 500 0 0 0 0 0 278 0 0 0 0 0 0 0 0 0 722 611 556 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444]
+/Encoding 570 0 R
+/Subtype /Type1
+>>
+endobj
+569 0 obj
+<<
+/Type /FontDescriptor
+/FontName /RDXOLF+Times-Roman
+/FontBBox [ 0 -14 707 676]
+/Flags 131078
+/Ascent 676
+/CapHeight 662
+/Descent -14
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/D/E/F/I/N/a/colon/four/one/period/quoteright/three/two/z/zero)
+/FontFile3 571 0 R
+>>
+endobj
+570 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+571 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1554
+>>
+stream
+xmTkPSGK]-AtjEh[HBQkQCI
+D9c2" lꗀV͑Lg}6
+yq"\?v;N`L9 po:mnx,4 녚 BxF8o٣łs.PXx]{ <䜅)) ~rh t-*IVL\t^(kZr{6BhՖD7<Xy%?P}0tc'|z,+Mđ ֒|Mk dʆ<_)XsGLx/sM6#T+.WOY'h
+ {7+,δYuM25Iy•)V]U%8J{~Bݏ_wyG=#ng)wsxm [$- %g t|f'k>8⤉AI0(F @ ±7gwwi3 x.&!zFu89p ^紽۴&.U媨>UJv5ibb/?y'CG\1|*TY3 dHN2ynyexwy8Q@(  QRlO i3'u;QnA"y'Jbj*:4G h29\rA :nEExǜ=2؈fE)Emp&)a
+OIMݙ! Ʋg~:9/RW~TN֒dں!PZW`Ǘ)p-NyoUv%Cfhlyھo僾<_8ՑdQztdhYw_ZYi ž
+Dɑ Fa _4pPC?8YɒɒOQK',*E$^zSF^8q80p!0
+endstream
+endobj
+559 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./opconcat.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 572 0 R
+/BBox [0 0 205 55]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 573 0 R
+>>/Font << /R8 574 0 R>>
+>>
+/Length 3229
+/Filter /FlateDecode
+>>
+stream
+xZˮ$I WEN"!6libEX;aWu71Ete'+t%x|_?Q΅~~}d+;7|YRE߄ŹL>o]3 7y:&4מ{\ÜG=CǶ$fo??F;:>ΙWn_Nܙ==:e}}=7oyo8t.m{{{[I̼;}2 =nP^ +gǂ~$Λ<[[©bpg80h;z[rw8lIv<o;$[=w&1+mW?18ܜ)FG~>h6<k[R-0l?{Adh_\X~QnǏ[ʜtR-䏄g=6.7P6LyC;kۗ]CLCLcMtR@; y>3ޞOMb!XϐYp^XWܣ<%+hvw `,z+6ؒXS4*ἰm<x,8m ^C3켰 x$fhh&gj1:{X%鴵ٵ >evsjKm2Ogt6n~}9 hG x|(3.gRsGxH| fɩ3d aHzD_)t@g;NUc_|i֋U"1ca'g|++=iIX y:٦6-B5K_5|iԋ 0_??t x䂿do7K5抺lWALp<mݳJJH7CwR#e$dUQȦ ۄ*CU {i
+\mʝJ `ML@]E+{vy&`eN*r*P5:A2CUpfƺJΤ1jη:W,4Lk2`ɾ Gn4A
+hbpK( |uo[$;@n@T'P$A҇MbD;OVr^$M`PvIpB:T bwQ+Ƈ aFK v.ӮA2lGH@qeU>֢ɸ(/Vk`VJ3 -asbA*|
+b24  "zٵ'zP ,CR* X1(ĮK-L>G ;X&)e2Ua/pfsCpk}x$>U6YLjO^,3%]B{! z恢fe$T`Ǜ@̚DF҆zH-I5  >{(1b!o9J͸#
+irrڵ ʐ.H6U0T%-Mca szib&o  @(ڂv%P6:H
+G6iUM6lic|>f]&hl< 릤@l 'q%8o2B'.QGyהL ~eѫCxðظWI~"R~*
+`A
+rvF L4ޑ&ja..ɪ'O0rrblHO =K44n 0:n%FeSm$s[ N$;|,3h7Z&YtMyshrYp2@(.lP<dWtX
+)䳠X r)ԅkW/ZHgL%J;ZV*޴,Xz $<'*ĹvJ}gTP67;[S9%5SЋT99,)U)UHFzeZ쁝 g.R΁MQS`ԁ:aPH4hb6L(r @
+tvJ2#Nibcy8씆 3S,dɩ]H89Y0j XwvJyb-N!Fuv
+s` =SNl;H7rb=b;;(SHdXD$H9)a=}Ϸ)o2B T%c
+ Y $NPUҝCPϚCPT sj>8E57Z(Ehٴ#բՒՊ9sT+&Vp>(Z:IvzHsayHn4稻Z:vj]Ր9>CQ IN94,sFjx% qQ }no wj886.G"TLNRmz9I $uAgNjs9Z6vjc=lA!NRX7"I lRI/5{`z9TʰdR J^˭aX*bm 3K,uRu܈,U)b,Y*w2 @SC9Te3T{i<u
+<ux9WS-<ZZ}:Y&ZZFZ֝Ze8OqjDժЉU3Qﮪ-ItHF`>܅󑼻DrGk
+"_W
+endstream
+endobj
+572 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195624-05'00')
+/ModDate (D:20130211195624-05'00')
+/Title (opconcat.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+573 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+574 0 obj
+<<
+/BaseFont /UCBRSY+Symbol
+/FontDescriptor 575 0 R
+/Type /Font
+/FirstChar 101
+/LastChar 101
+/Widths [ 439]
+/Encoding 576 0 R
+/Subtype /Type1
+>>
+endobj
+575 0 obj
+<<
+/Type /FontDescriptor
+/FontName /UCBRSY+Symbol
+/FontBBox [ 0 -13 427 513]
+/Flags 4
+/Ascent 513
+/CapHeight 513
+/Descent -13
+/ItalicAngle 0
+/StemV 64
+/MissingWidth 250
+/CharSet (/epsilon)
+/FontFile3 577 0 R
+>>
+endobj
+576 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 101/epsilon]
+>>
+endobj
+577 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 586
+>>
+stream
+xOAw[FƘ(wS11Vllbvw Nw6;SE~b#hH`^H;pd6Goo~JOQUXM')aux#JIY~40yoOyk :~Q+wB<9"vp2$]zB`b r;~F_.D!,h$:İ,.I 20ba@f#KȮ `#'1`)G82SN2F /Mjq*Td8e9HbF|H5.RjL4?װŀq l+KaJһA)1bL6q^Zǜ!b\ Y gd;\ j)"EQ|ڴQknN|>خlն#1ӉA/ѵj$>v6>U 3b׳BQ˫+<74<揝?zp1tl.?[X̼,r]%'F(EG0“cx s#:۳{Z[j9) E 
+endstream
+endobj
+560 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [335.267 210.476 359.684 222.166]
+/A << /S /GoTo /D (subsection.2.5.4) >>
+>> endobj
+565 0 obj <<
+/D [563 0 R /XYZ 125.795 735.4 null]
+>> endobj
+86 0 obj <<
+/D [563 0 R /XYZ 72 480.637 null]
+>> endobj
+562 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F20 331 0 R >>
+/XObject << /Im11 558 0 R /Im12 559 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+583 0 obj <<
+/Length 1965
+/Filter /FlateDecode
+>>
+stream
+xڅX[6~_GyOH"S2;iqO}H͍,R5ɜ
+W*K/ Tm-ۻO"H&O$~Ge]2xEc&x߽Re!+t9/߻ NVx,VJa.Ǜ?nP) {'x{xER̲,TBs)2!4>tfIR؞?ngwi{zv: 2_b=˶)`=ضq8t;{Ssoft~qnb*9}.`8TfL{oNmwLxZ'YKӠd`Q 80X1:3u@@x'?'c~a8IJxvGG{!ep"SmoeF9~>ΖfQmf5?Ocl\ˋq 4G SC>jOȫs%Pc&OT?j\WX:啼D:uf0n܈c8*^7*QAȟ]RQ{Myɺ Eoqx=D6|p TH|CY3`UtrUP(> t"N25.aaJT)6#
+5ܦ!"(\"kgD:Fp{fl#Z*59Rp7,Db1%8`R
+S(6T0UducdӰLL")J3=v]'NGPHrr4xuWxf4]봜 7wgXFv,<"A^NڛegTl
+֦<y5/YpgZIKf|L/\w[HrE)8I*huml?r~Vn4$p؛9躞B@]҉
+sI(|EWPS
+a> (N4W/oL
+endstream
+endobj
+582 0 obj <<
+/Type /Page
+/Contents 583 0 R
+/Resources 581 0 R
+/MediaBox [0 0 612 792]
+/Parent 585 0 R
+/Annots [ 579 0 R 580 0 R ]
+>> endobj
+561 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./exconcat.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 586 0 R
+/BBox [0 0 706 312]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 587 0 R
+>>/Font << /R8 588 0 R>>
+>>
+/Length 19816
+/Filter /FlateDecode
+>>
+stream
+xݽ.ɲ篧I{
+:$H-DA+1"ِ6mʌˈ._~{^Ji_$~5weߥ}G}WXw;nd^7߿<֒ϰ|_KoO/W)}<뺾)w!s1ZܿG2<7x|H\qAik|y_gG1׷y#^xB_]h11uZw\뻿npGЛ>¹~w\pp~qxn΋uORPz-2J/7/vksfGЇ/87<33soWeZ'񑌽W<Kwxz`XnϟHvl=7gբ'䟱-R0owzGڠ>c]f3-\|Hr` r#W;c8?8#<7;ZWm~oHվb}W -<wHڼc_s|q8g_[,VѾc{vq@?_A//LABŝZz.99?!uHMP1KeJobDC& ek59o[w%67]zߺNʤoї۳5}/|~|߻P`g[ΘcޏM&4Ŀud'n$Ꮔ BRc/ulQ -3i,Kc-<
+553^vP@ )f\+\`w&%y6 \f HȌǮ I|tWȫfĐٳ$^bW*EVօw!G
+  d9+""+E;ۗD>M5l
+ߩ
+Io6+3{uIbOK+ݰz6p8
+>;<uӚx@!MqɨY\ϣ_cQAec2ldj3Je(sJx 7챃j3ef/M7[{o&tuCo[(.#"S]6DGǶ$S# ¢Ф:&%uI~#wyWI$X1V MӖ ;O'OA]mSZb4O6|MjJuo/pْǢEԈoKI:nB<V QWm|EETʉ+g+^/#ץ]XNH t(R
+. a3
+smA| N-eOJc|X۠6/8Sw. 3-TBz
+㒏Z+o#+pPP
+Ĥγ⪱WX!<+.o%2X^sX<7U|Q̴bXPKW][;sK>LE4UƗEҤ?Cr~I_-JԍYǗ՚8zeʏx9gl.ɼM A3X7MC2l+ia]а r^FBm+U+s6ʿs*<rH[[HrՅ'[:C=hd/49[.
+%
+%$I.LxtdhwΞ˯p4=_MN[tr˹*)+byd._U Ι&LUVؠk%Uڪ,\iWϻRsպ(ΕFV=IҪ" Ѭ߽6'z$\@i nфd2ShF$H{4W4,=l0|kB^6{]u+dC#L"Ԯ~C; Qmw2V,59;#"-V,!hhb6H"c<࢞`Xb<(öQ6gD;EjnRCcj|Vg8!c!v.EIi<H7br!msw:d^s~ЃEoAzK -+=qוII;>wQlW' h!ǽ BtU!G<u
+ ?6Ø$p8ָ2BE
+ PoҸakdʏ5\eFF$u+@.A _hkDSx>(_o#JchRJYCZڲ$T05~H^re:
+[ޯglE㩉WoW<[lYdG5P[4Nސ"6/͒.$>&
+8@sq'/ ̾X&J/B&F@R߾z= a1N؈?>NKڛ(8@"]2_;fahw";ea,w|
+OlYrˠԒǸ;{
+u!{E9~1Ti<Bu2A'{2Ar<Di! ѝgXi]i)WyX骝1`<M5꼍߀ߢe0
+ֺ8x
+8T'vQc
+=FY,|Tμڐw }vȜBv
+N unz[)`'V4ɕ*2sy50bÿb}d=6~bf{x')᭙M9'JAr:QՔPlQCrrm ^D{xբ]0Nxme+e9w˫bNS^UYnZ*IUmf䪥,+gb 
+t4٤KsN
+ ݊wn'%gڬke[|ynŶxߓUF 9­*%b8 uGG *,8`3[[}5PeBBuD/b/O
+WרNY*a a~lzξCp?9;$˄M@6?&DfQS3 \4 nd*NS4X>uQx\͚
+W1zz'@O6U+|ÿzK)OѢKiQv5SyJn+xqzrP;J={"O_$CaSZGdWZ 0DUDU&OC34'{3) :0ܬl!)<4DJ:hC$(:ØxUÇx+ɎP/ɻ4D_?\ Abf~UWKSQy¼;?.QSOz2$/Jʨ'=Q|aT˓,u$+<
+$,P:*ܟf̏}hH'Z"2=i8LaI $D8OqӁ<`u>Rjכ,^DI#f~JG'eq!| J~k2Wys>CK}>Lғ6[ PǴ-"'<0bT~_z3(*Z9LRLyxjI=rB Ki@w{!Uf{<$4k]lݒLs#C
+–6kP~WqX۹ң֕dJvu&!*貵nU'|_W.HnVR<h!) ʾ4:)gNNn~ҲLH/~)=z
+2О5l6DXMJ㵴M1t;?JW4dkQ ԯdt ص?.Z;Wl>9R^D+֪Vؕ$k
+3?$jnIwn1|UL'Ji$/
+`{'ZTZI%AO#|DxM
+ə`\.rU-%hcdrT񨬶ؓ")MAҠY]%sgm[n/'u蝎dP;k|Y&V#w倦Fkldo:w n(o xږCXIOw|ԩָ!6 cދ%lgt%5И[S$Bdki[%2ƗѲ1`ɽ+Y|`}wfvKIN\JmT
+uՕ54`WCjbF zL_e?̂5R.?:+iUU*,UUU(-p~euZJ͞`鯝 ^G6[,y;)!=B +^R 4ɽfMT%-%QC)&|`AyO #bO
+sbDm?n<i=K^>K]@\TAhS b<=NT-[I)л*-(|zw
+˒O˝>)wCi2!$OEx>iǜ:EqvԧmGNdk49OUHHwBƝϺ+CQrQTnHJ,jr1C@o:%m.?Ȥs:$oyWN[bHk9>$$\i6#5+9VLjj:TId^:8cIn='13@?w Yfs*\<@]V |%]`ʼSpk%䢼LDhܳZ
+t)el qdA
+ #Uj w?!ò@w0w1y)ߠ@( ):J$3q@N[#ݮfҵ%k -`mzԦz^O`"u-P>n JER@jJ+u@ l¯'y\~0;'RBr0qSHwno&/AIޕ؆^ ݍ]I
+?nLeKSΥD07=<sp$r,kşII|+
+l|"6w/Z&Cv$&PW0g^}|=A'5Lٞ'b%N֝=1M[eVׯ&=Pz
+N
+쉵O2}U%o!-M^*(U3r]o7b}+܋}bg9Sw ӗD 6mkERߜqb&1P =W<)8! ETPa
+:=yK(Wfs]~H|r6?c.dfyi! Vk1gOWI
+%1)ۘg, ab.T^ :<PmT
+l4@cg/jBO^{@}Zi`J4}@O X_Y%b<i?Kt/宰uxH=thOٯadWGzݧX&f?="Z?,}jݹ_I>%aۅ|%]M'w(O -72ec*RoQS䪄CߎRfa=O;3g2D8? )~>V@RwLڍ
+?b*-cf 6DqܒtAU))S Z ܛ :T +v{&s7d,nuB%ff&ojloR(]~MB=߶'¹/5!'G
+E׋=!Z^M2E𷱍&LL$'KDaG㢻$j<[p^903u%Ϣݍr&F8h΋8YWĐRf
+GZjq^$hH><LdB '_z.T \M]RN/CQx=_N‡=W2qKscS.a),
+aPxըHoSx:ع&
+ߴ($= Q)UK
+Ț6ͺPq$jS$_T(%Jە ~#mK+*a\ǸC!"^81M*ՙt43ժ/*ɑ?Ƿ6C[$?AbE`xL*cܩ_@m$ '#V_&7ּ;g҇+Tp0>%ue?s!?VD J +2$XFv$YL4<e3/?&ne8H88#ݏS.eng*2cu@c?0CyZYfR I-ĜܤjVƔgly?҄Z@
+Kj=KؕJ"K$tfӃl@
+ 2 tX=8[{s.WOWYQQ*E:TN[0sPv9eI-h\iԌZ2 XQtysrNfd>cs2HNK }zlC<
+nth"sNL71R 7ר?>B:gQC្04۵l_$N!AO|I)PQ1jqj~u$<a?$[J!_$./W}收/ٟחPgCbk ޒm9+|K="c)j@
+xڪ+Y \1g?5c<S,֮k{
+yşP^yӊw-{µo1hЅ/C
+ѵ6#fWo@cԧ*gGz!j(I {V-|]9Xa6@CG<|({'Eթw@ӱ+i򮖝znQbr/[|l[CNq7=ȎmChPxj>M uΜuγT<9Cᄇr4۹)W l{V|S\]*'E]ac9-pwYi?=;%rA-kr吏 Z*֟X7%q\V9S?Ƀi] ONw8Tlwć2t1OZ<Hj8{9`[gkBӤ5? &Uv,W@fe<Ӭ6J)*}z&LơGJF]th$Uyrذ `
+N9@Չ,Xczg-{] n! io+>IICGGrH|X[B# ӥDhd5tlrGVjVE`qU>{B6NF@W1ޒZMiTul%z niO+S}I|J(!%PWm
+BY7ըQı\#~+}dδdphR]\=U]C,c 擟m<X5PmuXDHR\N⸀ &JY;[}
+70t\A}yPnҏئ2 ClvП&>>a~w4Rm9\u"c>Aro底LgIg-j^[Ϟ[$Jj-ԳnJ"Kz$+2@!w#y9e'
+U-v:EdGd%{7Z(WJv?_gwyT\z2;âf}Qt<w;;$95&5D R} o<oHe S[UN23\ ˢܲw;^٪MPlq'lʼ^VFCw%fNE@{ɨ[]%Bx㬤)hgT4'\+V;ʓrpfU˔Jwx!}J LJzP?319rX<S5UAsJGG霫iɣF&X;q赜gd:S}NQdH9<375_)$P:TmgG'ݡ|
+*N:ӢEY)̮NZ)!xi2!`ίV[2t+y)Jߙl y'W"PْxᔳKdgG}nvj$uC8Ds}VJӟ~ |' 9gP|6ȝH_/>&luѳwU% jTΏ7şEΪE衬RZI]AQRtu
+K6WOǯ&Zj'dždãN!C(w  N]: r +*Ո̫oB㯼1DGE47UZV&c
+U4_ӡɴֲ
+endstream
+endobj
+586 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195625-05'00')
+/ModDate (D:20130211195625-05'00')
+/Title (exconcat.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+587 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+588 0 obj
+<<
+/BaseFont /PQMUYX+Times-Roman
+/FontDescriptor 589 0 R
+/Type /Font
+/FirstChar 39
+/LastChar 79
+/Widths [ 333 0 0 0 0 0 0 0 0 500 500 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 611 556 0 0 333 0 0 0 0 722 722]
+/Encoding 590 0 R
+/Subtype /Type1
+>>
+endobj
+589 0 obj
+<<
+/Type /FontDescriptor
+/FontName /PQMUYX+Times-Roman
+/FontBBox [ 0 -14 707 688]
+/Flags 65540
+/Ascent 688
+/CapHeight 676
+/Descent -14
+/ItalicAngle 0
+/StemV 106
+/MissingWidth 500
+/CharSet (/D/E/F/I/N/O/five/four/one/quoteright/three/two/zero)
+/FontFile3 591 0 R
+>>
+endobj
+590 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+591 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1521
+>>
+stream
+xmSPSW~ٖlұV[ "ն+` DJQBI%Bу"(Z[EVku؊nwYn+csK;tڙ{9s!aYFi1(OB|S@XhW.O=a-%F]!3ɘ?z411Q◈6Yg5ꋴOH2Rlْlɸ]7Uڼ|]\1Ϥ+ԦMbKv'JK|ѼԪpm%QKMy%8nNrJ-]̳{[==q{T950.…rn~_<"AUڮ|օOA?TG^ =kdǠ+o]|#šQ@X@PEś5M^xQʟV8xJ͍ 8`%ؼ(,힦efǦ^۩H W-Bް@!ovNpwhs,'tڄmU.RYK㍍hQpپpr渠lqA
+yMRwv9ǿbVTK '™$a/Q{WWٱ/jp"\(~ C+H8N:ϣ8@Q'N**[k-ʼnCUkUuzgD)RӀֆ^c{Zwy;]MzXKW⌚ڕy0
+endstream
+endobj
+578 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./opstar.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 592 0 R
+/BBox [0 0 145 98]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 593 0 R
+>>/Font << /R8 594 0 R>>
+>>
+/Length 3992
+/Filter /FlateDecode
+>>
+stream
+xZˎ-Gܟ`vekذ0`#kɰGWϙҕezdEFFfG:H}y{|8~#܎<zԒϼQS-zfiGMSRǙ[_%%{-cY ׳K+c1C5k./k37uJGKL=3̃G;VOoYp=x-KV/EXb19t=g.,-9^u<u븖xz G Vou4| a- χ͆=S<sDŽ˚8"pq4'fH!ceio1AǡsK#6k6)l12631^2a0/9D/症7϶ k
+ߥKI9o~\pN ,AL;:Ԃc
+!P0O}hZ
+AY-
+4nX p.\`_7rPߏ&{sL78 .1SθY˻an1Vy֩0g/2459C$ σ==F*
+p~Uw7;S%[6-qY:WuOdª[O&qQ;pK'^Fq5$QҲ',bL+$-9ux{@oxB ?UH$=wvl
+ Ac8M]@^
+54M>ZDWhv:hbl,t!>׍n)T[BSa`jҲBSt2pSYK
+TR VT HP
+TY!dY˲5Ha][Qi lQ:&%&X`RfC
+)=4Y45 %!Ib Eb1a5XM8!" ד=~fA/Jm+4[Vi[GΖk')dZ-.]=Rki@
+{e%#*;9hL4vZ36, hPhd6F&wj?DtYtLK.\L^]Vŕ4ŖjU۱ zb>=uers, ),vщWmD<e c>(l\°cs#װ^ȉ5ESZ 2nwvDe,1M(S|9T! ܤWh 4&;"!ՙI_=B90E5[瘜tm6?G%Cs.˚ُaQEjtEdRS<1yOJeT>Xڠhu|77TT:0: UfP )ȎoRʢeŽ nkftׂ¾* `RVصb,^٘zt>H~uT]nhenfB5%W}@t} ZFf`$,`
+#S[<M'?c}Tz޷1E;IIh4r&?L ;1mb(؀ y=rWͯ2V
+󴯏k`1\͝U 1*?שnn2]\Z.%8V^z1T6l;:VޱubH: EksvO>s+~{j۲!l-~Zl*p5etUgJ6\lP+c W z|>KqRc!͒oam~$ ^J."r
+B
+ `o
+VPS'xHn0Ir^; .7&²݆,Y ;c[^̿+^!ɹcxwmgڹƍYQ+]mr5
+endstream
+endobj
+592 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195625-05'00')
+/ModDate (D:20130211195625-05'00')
+/Title (opstar.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+593 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+594 0 obj
+<<
+/BaseFont /UCBRSY+Symbol
+/FontDescriptor 595 0 R
+/Type /Font
+/FirstChar 101
+/LastChar 101
+/Widths [ 439]
+/Encoding 596 0 R
+/Subtype /Type1
+>>
+endobj
+595 0 obj
+<<
+/Type /FontDescriptor
+/FontName /UCBRSY+Symbol
+/FontBBox [ 0 -13 427 513]
+/Flags 4
+/Ascent 513
+/CapHeight 513
+/Descent -13
+/ItalicAngle 0
+/StemV 64
+/MissingWidth 250
+/CharSet (/epsilon)
+/FontFile3 597 0 R
+>>
+endobj
+596 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 101/epsilon]
+>>
+endobj
+597 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 586
+>>
+stream
+xOAw[FƘ(wS11Vllbvw Nw6;SE~b#hH`^H;pd6Goo~JOQUXM')aux#JIY~40yoOyk :~Q+wB<9"vp2$]zB`b r;~F_.D!,h$:İ,.I 20ba@f#KȮ `#'1`)G82SN2F /Mjq*Td8e9HbF|H5.RjL4?װŀq l+KaJһA)1bL6q^Zǜ!b\ Y gd;\ j)"EQ|ڴQknN|>خlն#1ӉA/ѵj$>v6>U 3b׳BQ˫+<74<揝?zp1tl.?[X̼,r]%'F(EG0“cx s#:۳{Z[j9) E 
+endstream
+endobj
+579 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [185.139 81.838 192.586 93.528]
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+580 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [231.883 70.41 247.815 79.979]
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+584 0 obj <<
+/D [582 0 R /XYZ 71 735.4 null]
+>> endobj
+90 0 obj <<
+/D [582 0 R /XYZ 72 381.753 null]
+>> endobj
+581 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F22 376 0 R /F34 445 0 R /F20 331 0 R >>
+/XObject << /Im13 561 0 R /Im14 578 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+603 0 obj <<
+/Length 1301
+/Filter /FlateDecode
+>>
+stream
+xڭVo6_!`ۉ)ɒ6 Em$ {hش,T\}4M?~w<Җ]gMxwd^轚ZLN_F!Ü{K+[4li柿-n":/._4oig, 2:CiחSNi ɐ|*MB{J/p
+Y䤥}]i5 8=2^,$*ZVU]W5BE]f8m^UcP+T94CmOs0>-KbO^H_ ^[ExHl$5
+rzt SJVmH&JģaJkZ=K5)R
+]JE).Q1"Z'~)W$:~ro msW5}WUG̹ԏH
+ ںu,n̓fxr*F{U&b㮣 8^d[W`*A{Um:u#ΈEUVmv2`-^|s'X39 r_fG
+endstream
+endobj
+602 0 obj <<
+/Type /Page
+/Contents 603 0 R
+/Resources 601 0 R
+/MediaBox [0 0 612 792]
+/Parent 585 0 R
+>> endobj
+598 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./exstar.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 605 0 R
+/BBox [0 0 253 100]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 606 0 R
+>>/Font << /R8 607 0 R>>
+>>
+/Length 3117
+/Filter /FlateDecode
+>>
+stream
+xYeWlenI ÉcH d&,xCc[f?ەS2/>kzK1AZ1X闪<{e4^}{񃵤׽d]3}Bn _Ti׿^ӫ#1J3"H3.-<+ldylh؟^K l_bMDH
+Ԥ΄ql2Dc&Z;A^̐xԆt19M:pHG
+^ D c_-R 6ʤw|Q[Bjx@:@]3ր:vx.(QiGf|Fj9/D Jl@YyyoOX ,swqs Lƥ1Id_1 5- "8GF o"!KfFQrX_XDCƭ073'"ek]yL=; 5I| -)+ΦAHR55o ¨"
+#NE`s#qł9WSqVZ@rxc X9f"GX%VĨcTiV#p?s$P.:ڍ|+E2Vx`+g#^a
+C @`u::ZRezR$܀ZC@O@fabN5 t55s";rcx5RTRWDR+y!T^@I42D$\Âh"6j?֨P7;uhq,y *ӵ AUd"J =E˪\M
+<}𨡧 8L#iIO=45GWMȏ>4tIaVi9%'
+98h^p$m
+˙TBb@2cI >IGsFE"yEՉ(mzO/9XS/>H'O5'O a Fh٨g[25B7&e
+B69V#[G1ʼn
+8Nsȶv R.XǞ'0#;F lR[X'ҽ>vA<6.zEȢR IvNك^umTS$7gR8s@Lx-pux _B[1p>7$y;qc,Pcr ء\R'L2g [޳ g
+5lJchUϯ>x^|ſ588o`OϿ7T9w @" )U1T8DAc\]9~7![퓼
+7AHϯ?u$
+endstream
+endobj
+605 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195625-05'00')
+/ModDate (D:20130211195625-05'00')
+/Title (exstar.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+606 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+607 0 obj
+<<
+/BaseFont /PDWFGB+Times-Roman
+/FontDescriptor 608 0 R
+/Type /Font
+/FirstChar 39
+/LastChar 122
+/Widths [ 333 0 0 0 0 0 0 250 0 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444]
+/Encoding 609 0 R
+/Subtype /Type1
+>>
+endobj
+608 0 obj
+<<
+/Type /FontDescriptor
+/FontName /PDWFGB+Times-Roman
+/FontBBox [ 0 -14 707 676]
+/Flags 131078
+/Ascent 676
+/CapHeight 662
+/Descent -14
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/I/N/a/one/period/quoteright/z/zero)
+/FontFile3 610 0 R
+>>
+endobj
+609 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+610 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 934
+>>
+stream
+xeQ]Le~?J̶4T3Yl8':g 2L
+S}4 ykxng;ihpxxT0FсVE$ tvWfvYJRsC~(!T-Nq"bkbޝS7]ryKa@PJjTD-/o4*d p~!#ߑd@<Y*ǁXr`1O6}~G!!Qp8_;AO'H]Bk\+
+endstream
+endobj
+599 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./explus.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 611 0 R
+/BBox [0 0 375 100]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 612 0 R
+>>/Font << /R8 613 0 R>>
+>>
+/Length 1331
+/Filter /FlateDecode
+>>
+stream
+xW=oeE ﯘ. "f !$Tt Zm_x澻EQ=oǔSr|VGN0jZ%(;R
+,IgME*(IԚϷw*4=/evCZKzۅa- <*Tic2No?`.J/t6"d5qA6𷐉]|;l'[6~7RըpO@3ϷcEp+ Yp
+pˤzF^2+r&f^Nr؏wّm;mqX1n Y,n%gp[
+] J`hx=:>/@พZ -ۀ,zvj+}b-&Z2cL2Zvp?Å L]tbŨW(&+YKUqmhtyF>gR%̕].3#mhI`vA# \X
+Wbh~-qB'G uv(FSFeY
+ۑF$,*E@D%tw"it-$ذ*Q(F:'C~ 1Q=3&Z"Ľ "N6)`3d%Fpm|8RS7=eݴL. @ec&- UnYx"<K2P.,˛n=|Adn0$?P3#ei0 98@$'ah`-3P4󌍩ȊsLEƚq #<#17"kN'
+}Vb j? Q:8z9P[
+endstream
+endobj
+611 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195623-05'00')
+/ModDate (D:20130211195623-05'00')
+/Title (explus.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+612 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+613 0 obj
+<<
+/BaseFont /RSKQDA+Times-Roman
+/FontDescriptor 614 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 250 0 250 0 500 500 0 0 0 0 0 0 0 500 0 0 0 0 0 0 0 722 0 0 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 611 0 0 0 0 0 0 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444]
+/Encoding 615 0 R
+/Subtype /Type1
+>>
+endobj
+614 0 obj
+<<
+/Type /FontDescriptor
+/FontName /RSKQDA+Times-Roman
+/FontBBox [ 0 -122 707 676]
+/Flags 131078
+/Ascent 676
+/CapHeight 674
+/Descent -122
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/A/I/N/Z/a/comma/nine/one/period/quoteright/space/z/zero)
+/FontFile3 616 0 R
+>>
+endobj
+615 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+616 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1250
+>>
+stream
+xemLSWދҪ47u1&*042'{1CPe(mP@K`
+
+z/Fv1<j"mN
+endstream
+endobj
+600 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./exoption.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 617 0 R
+/BBox [0 0 477 100]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 618 0 R
+>>/Font << /R8 619 0 R>>
+>>
+/Length 2192
+/Filter /FlateDecode
+>>
+stream
+xYm5Wa6.J
+o9^{r L}#5 ]7E^^Cv"ZJ,dnxoٖrm %8,x{hRB:#v![yR|8M 2Q[%CԋdbE.s)f5<\A]x,qn\.kFĮN{͖LegBsATZ݅)ǔ-Wg \2dyy]D0-%fy2URGmTCq 6VBݶ呻ٺ`iDۖ{qΊi[1n YĥyӐS{ʺ}ko!+3ᶄ[coxgVJ1wiq
+׳r(=_|;`PLM8P
+#S+޲a9Q^$ {c5cXze9QӺʮ}0cխ-}f,,{;VFBx0d{KvBIKy! Z$x4PRV$PZѿِ
+NZh6=Cv̑C*ݐo9+O2+3;FCXˊcY@
+aLQ {(
+-=aV_:$9fN*}H֚!=00}c, G L
+܍b ŀ44$MCп'Rwr%ß I4DX@$O-Hk *CUd`VSR` ɍ a@Xj<umY d#OwC.قNՄC2jNe3NFW$ufJ$rK3Q Q;;<2SK
+٘P#
+:br Ɍ.9cHfÑ C0DI6B1gs%9#
+endstream
+endobj
+617 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195624-05'00')
+/ModDate (D:20130211195624-05'00')
+/Title (exoption.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+618 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+619 0 obj
+<<
+/BaseFont /LVYSJG+Times-Roman
+/FontDescriptor 620 0 R
+/Type /Font
+/FirstChar 39
+/LastChar 78
+/Widths [ 333 0 0 0 0 0 0 250 0 500 500 500 500 0 0 0 0 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 722]
+/Encoding 621 0 R
+/Subtype /Type1
+>>
+endobj
+620 0 obj
+<<
+/Type /FontDescriptor
+/FontName /LVYSJG+Times-Roman
+/FontBBox [ 0 -14 707 676]
+/Flags 65542
+/Ascent 676
+/CapHeight 662
+/Descent -14
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/CharSet (/I/N/nine/one/period/quoteright/three/two/zero)
+/FontFile3 622 0 R
+>>
+endobj
+621 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+622 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1039
+>>
+stream
+xePkL[e>r>Faz=F3wc\(. ulkmmB)-`FƠ Zɸ B&LdiN=51ϛ>8Ɖp番2SXVFL
+bR hrXqyqzOD u+rl
+tZJwٷoLHD; e&Ne^+z.ok43BSWhiE";)tJu=tVFFfZ8dfnD'iLaH`bY1l/%c
+P5͎F$W@(ֵ^7pul0l GG&?;#p('N+MU*ue&pBsMgu0bG )Ѡ0 ~0JPCT)Zce, #lLd4gTq HgN`Ilɟ)؈.˰
+}X
+Vo3_j>bMa4
+Z >Tڲ;t[a߸
+endstream
+endobj
+604 0 obj <<
+/D [602 0 R /XYZ 125.795 735.4 null]
+>> endobj
+94 0 obj <<
+/D [602 0 R /XYZ 72 509.053 null]
+>> endobj
+98 0 obj <<
+/D [602 0 R /XYZ 72 295.465 null]
+>> endobj
+601 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F20 331 0 R /F23 334 0 R >>
+/XObject << /Im15 598 0 R /Im16 599 0 R /Im17 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+626 0 obj <<
+/Length 1937
+/Filter /FlateDecode
+>>
+stream
+xڵXo _A N:ifբWwMڴxWÎ/^rHi.-l`f8Ꮴϻoe |/`T6p.߿awqJ)m8Nonw"q~]߼]rl7tu6pn +Ua'AL>[7Aa(]{q!^
+:N֛BITs+|/L~mڭߪf67կzOd{BI]ZX7^>3I[_A /4HϝݰΖef/6iЇs="D O7Y8/aȊA2ft y$v\=
+GR[jSDW4#f'?^jw~#J eٗ\Hib&.d]}7\ڢ% ][ȺY5{b/ :}/Ia
+!QHWM
+Qoo?s!ez)t:U_"pڌ/Tqqgo@ H0v>eXevݬ trͤ ryjS\
+z" N yL*0?dz(F1z:ىIffV-*Uz&ZL'b98wA8 7])4G!M׎R^ S6EVCiBT薈}`|_7 fS۹J <̹S*"h؎
+ McCnH3}ۧ߁A+tD3% t08dvzȏ- =u#5 <ҝWntVYiپ*.y|KRS/jG , K %A$$9Ū=i7:_E&^ęYgxrfV؎zOWv(64 |#E~d\Ƽu=,r~y =~$ 'jz.#r5lT^֧ܧdA/o8G4"ǙM0f%~l_),hʴitޣwn 7ihSnIiahTa6tؠU"}jjݟ>85 C{#6@|~,Qhyjcï$-U<hCE -FJ:feaE \eXn (mqCLz ?@!PΜ~)_}WPs}?
+endstream
+endobj
+625 0 obj <<
+/Type /Page
+/Contents 626 0 R
+/Resources 624 0 R
+/MediaBox [0 0 612 792]
+/Parent 585 0 R
+>> endobj
+623 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./exnegate.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 629 0 R
+/BBox [0 0 318 100]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 630 0 R
+>>/Font << /R8 631 0 R>>
+>>
+/Length 1374
+/Filter /FlateDecode
+>>
+stream
+xWˎ\5߯nb*~VY"bD2QE"9f*K4ur/!R
+z^_W WWjRs(Q /w☃vʜ$\)DH}]TFuj]vhLp#C<߮mv"ۭӷW%55"?JIQti )JFS,YC/J>nl.]I_nv!UJ4Eu]Ӈ,1r?#HRǽQMmwo(S^
+^0#K)S<ܵYgQ]x̑`d[E.Ld4CkS5$2#k%qqIf h&] bnR=-WƸvbSE/vhVI E-0>\l
+R+C@3qf_S R@rxPR> qSuA
+)xYl8z!;`Dm@D0zѽub>M-zs6+'6
+ZFsFm|F"r{Y-d0襮A趸9HTsv$@BxRB z3,V!QϤ⁺ ̂O?cA d8$涮 @;"BHb S$9RQJlb `,mRHn7FtTOROEHB ]BJ-#H W_$#Pd?8֓Ft诬idJ\rV lzTOxB"LEA11j G\ sP @ 4U*E+#"p[%}$l:\F\㲴;բu% Ho]3f<6i"h6x
++N#,hEuxM\&,[,.t}84XC/c鎤1c^:
+P#[O/כѭ1!/<}=ʨ(K( %x>yL&=}.<|@,>&~Gܹ
+endstream
+endobj
+629 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195623-05'00')
+/ModDate (D:20130211195623-05'00')
+/Title (exnegate.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+630 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+631 0 obj
+<<
+/BaseFont /GTAMEX+Times-Roman
+/FontDescriptor 632 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 78
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 250 564 250 278 500 500 500 0 0 0 0 500 500 0 278 0 0 0 0 0 0 0 0 0 722 611 556 0 0 333 0 0 0 0 722]
+/Encoding 633 0 R
+/Subtype /Type1
+>>
+endobj
+632 0 obj
+<<
+/Type /FontDescriptor
+/FontName /GTAMEX+Times-Roman
+/FontBBox [ -9 -122 707 676]
+/Flags 4
+/Ascent 676
+/CapHeight 676
+/Descent -122
+/ItalicAngle 0
+/StemV 106
+/MissingWidth 500
+/CharSet (/D/E/F/I/N/colon/comma/eight/minus/one/period/quoteright/seven/slash/space/two/zero)
+/FontFile3 634 0 R
+>>
+endobj
+633 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright 45/minus]
+>>
+endobj
+634 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1406
+>>
+stream
+xm{LSW^Ti!:D`#<KA5)RhZ v*/A(DCDm:fNXtqn4Kvdq;{ p
+ 1uӈ;e>M{};|#8p-]K?,)g;OS^=D# >ႚKDٕQ_κHhTMLnd4PYR]Vi G!>iA,$P.>BT{U9r50-)QKOa(cMPc~-E4I(O+sty
+;vv( 
+iQBo1( Ff*0%mzk~oaLpqS
+eu|mZbD\_u `\(-4Sm7՚*z=Z`:Pd(.{JۤX+h~h*|%r6.{m2؝۠P <>AvsM+Jg»Jg?oCH=="Bu
+e䈠m;7$O8
+_a8"ǩ{$SpJysz,ǞU=̎[ ͙+ÃSRapz?>,J% <a(D$2"@8^qTޚq|Ѷ%'xk<6G^w*s`anƥdf)S[]UFc$FȜ*->V$_#pHٌi*/͉wd7<ɡ<LU'ہB Wo'[2z Fq9 G){mVqq9Nj rS"9r Gtrt7acץ=r.2QN9y<JB)g4|tWVΐ*/m'+j!\K]bO#YyE"!3F7Лy_v$n O3$V#i~erT~Qt) <y; 
+Z}8Yԥ4-K1<"'^K0.RX3m.̟~)G&G'
+endstream
+endobj
+627 0 obj <<
+/D [625 0 R /XYZ 71 735.4 null]
+>> endobj
+102 0 obj <<
+/D [625 0 R /XYZ 72 702.645 null]
+>> endobj
+106 0 obj <<
+/D [625 0 R /XYZ 72 611.114 null]
+>> endobj
+110 0 obj <<
+/D [625 0 R /XYZ 72 414.309 null]
+>> endobj
+114 0 obj <<
+/D [625 0 R /XYZ 72 310.596 null]
+>> endobj
+118 0 obj <<
+/D [625 0 R /XYZ 72 132.05 null]
+>> endobj
+624 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F20 331 0 R /F34 445 0 R /F26 628 0 R /F21 333 0 R >>
+/XObject << /Im18 623 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+637 0 obj <<
+/Length 747
+/Filter /FlateDecode
+>>
+stream
+xڅTn0 }WQfײcmRAIǘ-˾~(R`@EGʋ-"*Wn,/9Or$|1~e9}{|*~Yx3<~ɍ3R4Js'w&<BcFIst9^y$YR`b#w_倠DJ~f=tk+{Vv|GNԜSbJ
+=-|URAsb
+~Qu< NJ6PY懨^wJy`e;JKxr)16UFY GXA‍Ca_6tNli
+DX<F%[3ŮB+t-mowRq#@-F1Z=H3h&
+
+
+?wB{#zt+#Guz!XcJ+_+|څ[<|EcV=T
+endstream
+endobj
+636 0 obj <<
+/Type /Page
+/Contents 637 0 R
+/Resources 635 0 R
+/MediaBox [0 0 612 792]
+/Parent 585 0 R
+>> endobj
+638 0 obj <<
+/D [636 0 R /XYZ 125.795 735.4 null]
+>> endobj
+635 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+642 0 obj <<
+/Length 1935
+/Filter /FlateDecode
+>>
+stream
+xڕX[۶~C3#tڙf>ħ4IP^||
+Obw7(ޜ6|7*L&W,ɢ26ͻantw%LyfoʨH4 ctܯ黑etQN&Ցa_mw{|.4"%NgK3x=鐁ٍ*%[a"涒짇#qdJ@:pCӝP,QjJm պ^sn:&Kg;"CA'[dzx4YxNC 9}{#XPOzhWb[
+C>Gtm:[3OZU<K֒&63$ܮ0ky^j{ &&I+%1El+8MP
+s'ٵ ٍT9oV5F*G3-m01T0#:-8/$:Yn XG2yy@hmE1fy E6ks!W|9}y7F+h6%1A1\s g,pC©gM@M"L$\*
+l:_oh9ĉ5B!+Cqo8j](z *h t
+ƥ_vJ/Ӹ-#q@z H'ъ> g❱3v )qã0BU;qZⅩ(0Q
+endstream
+endobj
+641 0 obj <<
+/Type /Page
+/Contents 642 0 R
+/Resources 640 0 R
+/MediaBox [0 0 612 792]
+/Parent 585 0 R
+/Annots [ 639 0 R ]
+>> endobj
+639 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [423.721 157.416 439.652 169.105]
+/A << /S /GoTo /D (section.3.4) >>
+>> endobj
+643 0 obj <<
+/D [641 0 R /XYZ 71 735.4 null]
+>> endobj
+122 0 obj <<
+/D [641 0 R /XYZ 72 702.645 null]
+>> endobj
+126 0 obj <<
+/D [641 0 R /XYZ 72 346.152 null]
+>> endobj
+130 0 obj <<
+/D [641 0 R /XYZ 72 131.719 null]
+>> endobj
+640 0 obj <<
+/Font << /F20 331 0 R /F15 325 0 R /F23 334 0 R /F34 445 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+649 0 obj <<
+/Length 1392
+/Filter /FlateDecode
+>>
+stream
+xڥWYs6~ׯL3c1ClݺIۨOM8塒tl )&kb]~ ޵z;Y^\h0\y뭗E8NՏ "˖/og52?PX[d!+Brp Y@R!KkE} 鋦Sb]!5,[l'<ZNvϕ?hLifQ1ۃ%37M:)7]g;<]($xX8vi{a>bp8,FMo0Hqnz.!Nxcdw:
+xʯmS vlL VRĀh q*W:MA鑗#,Sn;pPH"d/ܝqr-dR曦b?.oۦbm᫏NqOp0D:Kn,~HmLGֆv R0 .]ޅ*n;Y/+b`։6ۣjRbF %aG)<u )&Rbm˃~~0A7:^i"neYg(9yƑF⽽.,)xpE=Y*; > w*nt_L!b_|0 *[~׫aU1p&×'s! x%^%AboSb>v{Rm3 )\4R`\]: -׭D
+(IA8j%VG]D[h紿j TxΩD F5}2Vɞނ$`vBpT?HUlnMq >@ WIS2hJL`ʿiሖz3Y&R ):x,499tw{1w
+endstream
+endobj
+648 0 obj <<
+/Type /Page
+/Contents 649 0 R
+/Resources 647 0 R
+/MediaBox [0 0 612 792]
+/Parent 585 0 R
+>> endobj
+644 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./exstact.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 651 0 R
+/BBox [0 0 417 142]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 652 0 R
+>>/Font << /R8 653 0 R>>
+>>
+/Length 3202
+/Filter /FlateDecode
+>>
+stream
+xZ͎f9 Oqw= 7Il$ f^
+5aL߭.[Ea+ѓZvcg1_ʒ&.cND.*jy>yюD\Ml>ێ fb=\g}C
+椡˓-b;=ajjHTC\=3FJHT\KyFȷ_(/'BzQ:=Fc{)-l1%3[Dڵ^H8*jK
+JћCWMKjzJ e̿s5}Vg鳣pNU^;Foz`kӡiI(h4klK-Vo'=)rOJpZ)9su+
+QqW-H.yX^f84nXjh 1Rb᥯$SvEr|z
+$bd]cB<y޶
+F/R{~b|]~ez3QgzKbopT5|ݖ |Zn,veP1v&~ۃqROpbY6Zv-%Ezx[4Cx-(AZi*;[EJ[<{I[ u/27TlH=
+
+HIiPFMb)~`{xJ1;?W`6r:ƑN*\P/"\B˦րv**Mn5sc 5NCAz%4O 0CpRܩnwY-p(Ų, %z6+txvDX젞qxq7D_ь ~4{I0A[x89<.-1.JTqAx3o}: ` jp{ 8-C
+endstream
+endobj
+651 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195624-05'00')
+/ModDate (D:20130211195624-05'00')
+/Title (exstact.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+652 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+653 0 obj
+<<
+/BaseFont /VWTQKX+Times-Roman
+/FontDescriptor 654 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 0 0 250 278 0 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 0 0 0 0 0 0 333 0 0 0 0 722 0 556 0 0 556 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444]
+/Encoding 655 0 R
+/Subtype /Type1
+>>
+endobj
+654 0 obj
+<<
+/Type /FontDescriptor
+/FontName /VWTQKX+Times-Roman
+/FontBBox [ -9 -14 707 676]
+/Flags 131078
+/Ascent 676
+/CapHeight 676
+/Descent -14
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/A/I/N/P/S/a/one/period/quoteright/slash/space/three/two/z)
+/FontFile3 656 0 R
+>>
+endobj
+655 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+656 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1460
+>>
+stream
+xeiPSW3{4&uHQ[)pè!IH !$. e\ƪt]^љtr;,s/qa8mVi冘4V8GENCs8vj2}r9o Amg1ձZ/S)F-iQgKHH)H *Et>15:Vc\!]zk4R@4HemijiJufQ%Ű˻)*AO]4Y&W4 Ȭ)^db Uv,Öa$6`B f`\L4`NGƱp.rùT.^CozɭhWuiS}SŅ[6؞x](ƃ/AT8ȳ:VXKLz$1H2x8I.C"qQq|9z& .R pI 񬬡$Zz)2
+k.x*A)7DVH_ pnM2&q[ћmuVT$*j::uWq
+,hu얛)O
+3YWWf/$hi85"&hbԝ8 p
+A݃`YyNYU @2b>lEQ<3A3y SQ<
+&xB GK.Q`nt׻a-@`#DL|dch9fyeAVbim/IIQ(O3:d,xPwApSE'x
+nԀ{ٱ&BsԗZ;J?:&:A+mA
+5r`ĵf2D>UYey>1>78^
+#Ѧ"3
+Ji%'ٵ ˺?G)t¿ rS՘\sՒ P)6{%/L+ܞ}dr E@~| -{Y (N{/R>Nѭqn'Z+yb*#(w) FwUYyDG:[%X] 6/Wӑݛ۩eQ/tmt=)+_ʁsfj,d/QDCQdKM-$~nS
+=z~!{8|1A:8GTTVdk<x< x[M{jMm]R6k[|z)-H$s^1Jc!#P-k4DƧ}wgV6ʬ6}QoT2 no
+Gsz[- Y4)|vk.ffY
+Vo5}9;r[@^JVyyVg[g Yi^ 7{=ӟS9(AS
+endstream
+endobj
+645 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./exdoneact.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 657 0 R
+/BBox [0 0 264 97]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 658 0 R
+>>/Font << /R8 659 0 R>>
+>>
+/Length 1263
+/Filter /FlateDecode
+>>
+stream
+xW7 +ԝ^$2 Mv`
+'E|}>r\qYRc8}IJ~?=ojבǣJ=54HjnTƕH*VH맣L-eްZM5^}8O^eOLJNZ{I?rxwʅ2HmFR4
+IF$d8a7Y([O{)JF-VŊr2@Fvllz^fjiJ^k}aϸ[A+sYܸ}ݹ"W0j6y^{f%7Rl}ջL뜝Z{B8:_>{)!Ab|}>mZǸ泏9YL<WG~9Y|R"~>FΰMm?tkTr`'q*:t>ߐ
+]qxZbbu"h$v߶&@Hn6m6uw݈t5c!؀"sC!yԻ O"L.D'AQz]wbtUwZ4Ї] P<&!pA٤pPrI}ZR+Y:h1%is <#F 8i,Dc4(%h3=S]Lbe 3^鄮5Gx I)KjTfق\:*DcL$^ьeWtpnr`0ž.cd`L(ukڠVmP:-SQm]Z ReC+<q*Tq_R򱸼 3WRQH|Gh%[+HXº WiMؿ#eX'p
+D{"6NZW'̴7HF!uQdɑ'8
+Y ^g'10bDq -q" %l=EA0
+endstream
+endobj
+657 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195621-05'00')
+/ModDate (D:20130211195621-05'00')
+/Title (exdoneact.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+658 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+659 0 obj
+<<
+/BaseFont /BKULTE+Times-Roman
+/FontDescriptor 660 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 0 0 250 278 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 0 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444]
+/Encoding 661 0 R
+/Subtype /Type1
+>>
+endobj
+660 0 obj
+<<
+/Type /FontDescriptor
+/FontName /BKULTE+Times-Roman
+/FontBBox [ -9 -14 707 676]
+/Flags 131078
+/Ascent 676
+/CapHeight 674
+/Descent -14
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/A/I/N/a/one/period/quoteright/slash/space/z/zero)
+/FontFile3 662 0 R
+>>
+endobj
+661 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+662 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1057
+>>
+stream
+xemL[Umie6 7wL2@B4*nAۆ뤴Z^
+E
+
+58av$`
+MM~X(tQsM~:X.ܩbKeeKTrUQf'#MTOހ+<PgoYRju_-PCZ$(nwv_贤
+RT&q=!фxlۆ9$]d$=P"BPtJE)no=^׹5f&W|
+\a%LJ?t:'\לnHǬ :V;PSV#_pO(OT/؋[H&$
+endstream
+endobj
+650 0 obj <<
+/D [648 0 R /XYZ 125.795 735.4 null]
+>> endobj
+134 0 obj <<
+/D [648 0 R /XYZ 72 450.486 null]
+>> endobj
+138 0 obj <<
+/D [648 0 R /XYZ 72 211.449 null]
+>> endobj
+647 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F20 331 0 R >>
+/XObject << /Im19 644 0 R /Im20 645 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+668 0 obj <<
+/Length 1651
+/Filter /FlateDecode
+>>
+stream
+xڝWsD3Љ âCR)P0k%W㔿}a+vu[I0K%&" jH~FrƻәRSt$s׎s1w~uzn"k G2`eRY`g(LtI4Ol{,[e<J1<S8i%l ?"iÏVLy=U»ϋ;=ˢU؏;$8$]5E 4˘Tp\||6Y\s2ta*ݔV8>4[{
+Y.[yU~(tQ SwV7$$ 0QVghf DX F7
+1f$ڨ@ SSUubV` !!kf*j7tdfNݏnWi2EG
+I"3
+ []7$晉k戤j#ݜXݶV9{cۆ PlgeAl\#Tt؍_w*HШ
+.ȣ2Yx@Ơ4ˇ=O0v}XsӸ1jvcFZ%MSK0@Nիq
+ga+4Oq3"S y4c&'ZmGtEeB_R*qOg5eXxE|̀7UT(PcA" ,6 ڊAD6<j\khNjNSЍPNJ=ba\(Ug w8m\ƮDk:_~
+]%u\{
+pOG76&7T_je,fֽHP(V8,6 ~t78X V>>lm`j`@:#ŅU@1ʋ^SJpIQ:ع7
+Eo(`
+E+N*,Ο&7j
+endstream
+endobj
+667 0 obj <<
+/Type /Page
+/Contents 668 0 R
+/Resources 666 0 R
+/MediaBox [0 0 612 792]
+/Parent 670 0 R
+>> endobj
+646 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./exallact.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 671 0 R
+/BBox [0 0 391 58]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 672 0 R
+>>/Font << /R8 673 0 R>>
+>>
+/Length 620
+/Filter /FlateDecode
+>>
+stream
+xU0 +r{o;qABH!NEh;,}N=Jm=3I<
+{<:bڬiÝ^6#
+@WT[;AFg;^=#FeQagwR㠷
+,@T]ep𱹣?OvƝ 1/KPfYDNx45/vcά wԑiXESVx&Et
+ŋ&C͐g(&La@u꼣M 邂Y_$ߣ>gh cyG}/#7}=8c7=uR$_vn/Z*-_n.Vkc ;>o%vD+ u3 )XCSzwmzD:p v^'׋
+endstream
+endobj
+671 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195624-05'00')
+/ModDate (D:20130211195624-05'00')
+/Title (exallact.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+672 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+673 0 obj
+<<
+/BaseFont /VCTTHE+Times-Roman
+/FontDescriptor 674 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 109
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 0 0 250 278 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 0 0 0 0 0 0 333 0 0 0 0 722 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 778]
+/Encoding 675 0 R
+/Subtype /Type1
+>>
+endobj
+674 0 obj
+<<
+/Type /FontDescriptor
+/FontName /VCTTHE+Times-Roman
+/FontBBox [ -9 -14 775 676]
+/Flags 131078
+/Ascent 676
+/CapHeight 674
+/Descent -14
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/A/I/N/m/one/period/quoteright/slash/space/two/zero)
+/FontFile3 676 0 R
+>>
+endobj
+675 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+676 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1083
+>>
+stream
+xeQmL[U>\RA蓮l@tጌHBZڎ@ i)
+mƇ,f،aAه5&9b⭉ɛsyy)%
+
+Kݡ A"@a:tIµ(+n}!*\Vu<\=-"N&wJ-nOvG q@t#ui@Ddjs_e̸nw`C<nB([(
+R>.%Eutfw n y ~߆ rfyiІN0l="2yqyw
+!6)h{={ _N3p[JBUh 2ۧaBzjι[wqw(!{amJA Iw \9toqY-%W 6`2< . "fCIf_M(wZ SK376l̑qjGd1q ;Nj+˒[״P52Xs
+¬Zdɽ(;9)jfsάj4MںQ\Mr"A]V+n[qOzS~49=>690ik(̣)WktYG1=<Xm8jUrv]t- l30Xq+Sqj6+ĚLox>O-/ܩt ݮaϐۋ~Klm9Kd
+endstream
+endobj
+663 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./exoutact1.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 677 0 R
+/BBox [0 0 380 97]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 678 0 R
+>>/Font << /R8 679 0 R>>
+>>
+/Length 1362
+/Filter /FlateDecode
+>>
+stream
+xW=5_.Hq<g.AB
+$P
+(\(<DWgޯ!E
+Yk(cc7D(큨,91JycIMN>Ne8-_;KT%Jy%š^~=>}sԨf#S%;L$ņ
+EI$s|=XcMrZX0HeAF;}3Q,dE,ó+$BVlE>C/2%W
+I&SirWDKqELrOiE3%-]J$H^BVOlapJ©--8w4*h˯
+)0< HFTu*xykUNVQ7Eq\^U)ᱝcX]b4M)S*2_lNqL2Z6Mjb撹s:T]SL撹s:őeތ/ەVX{)6ZSs| f[l-S(y_fyQ yC2
+ʶb,~=
+ `58Q^ >"`%k”b%ciЌ9 fl˱dw\FB
+%M H<Z"}"V+{#zonɞ-(VA#VJ2L~w'2hij20vvD0lb,EZ!43XXܨvAy`nG*+`eq%PckD9
+endstream
+endobj
+677 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195622-05'00')
+/ModDate (D:20130211195622-05'00')
+/Title (exoutact1.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+678 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+679 0 obj
+<<
+/BaseFont /TJODRJ+Times-Roman
+/FontDescriptor 680 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 0 0 250 278 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 0 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444]
+/Encoding 681 0 R
+/Subtype /Type1
+>>
+endobj
+680 0 obj
+<<
+/Type /FontDescriptor
+/FontName /TJODRJ+Times-Roman
+/FontBBox [ -9 -14 707 676]
+/Flags 131078
+/Ascent 676
+/CapHeight 674
+/Descent -14
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/A/I/N/a/one/period/quoteright/slash/space/two/z/zero)
+/FontFile3 682 0 R
+>>
+endobj
+681 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+682 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1148
+>>
+stream
+xe{LSWޫTȍ^{(̱ "/eZ)(RZ
+A
+FH[^ 5 ,dQIe[ܲ9.Y9;((䫪<M&x;)+Gfȟ&#tP@[Qfdh'24-JeSWtD˿ThU5!hR5Պ ZV+-J-///W
+jEPVjX>%))9^8檪O4js5|6lTO
+ P
+-ݬ 064!M!L:tCb~,LVtͤ:]b]㡍ukg[yxx'P̷"qh2@=Oxk08w}e7xƽQ[w_]vf{
+̫6ŻH \ Bo^op_\\ RAU5Kg!@唦Bz=SLONNLMV hKOĤ寃/jGLR㏑1̇r}a
+endstream
+endobj
+664 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./exoutact2.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 683 0 R
+/BBox [0 0 582 100]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 684 0 R
+>>/Font << /R8 685 0 R>>
+>>
+/Length 3032
+/Filter /FlateDecode
+>>
+stream
+xݙKWW~?H1AE7N  Y} L<Due {܂|xy۷}GL}ly=ͼ}6SK|{ e}1h Y_2v(!uq޺VRTR>=Lk6xW@R{b {sѹı6^B['߯OƲ^K^wQDN)>õwO)Y=ҭ>zӭ`q}^8:b\".:YCN;؂a$<kӰ kEڰ׻^z;vv,?:K-`-8; pB։)/ns}eW,ٰN8_7i!N)֊CXh^5kxͺ2>;eue4"<n;5>z+li0|Xsޅ=<kERDu-:
+l"sLF91/h#ogΝ3{~5Ҩn[kܰ_Ѯ~/g}Hs ۪(m31B8GQ^#O|a+з~ DKBs+k3<U@%QbHC{Bzu[߄ib1d6?exF(鍱@<tCr % 590\ usPN+3g5Ӑ}:i!t{BĶ\=gF(`^9E@^#mT=HSi{BHNOז7dH4H9Hܫv#Ҡ
+W~3
+;agjȃ<9 s# (,ww &7amMb4FI"H?1S i97 \k:6dj5lHe& ?bfu,cb0;r+IqtjĶ4 vBBAf(1DeWSؚ5br;8tRQbxT4`UψJLǺ>:I܇Fͤ5oJ.
+NE9_iZ㶻NjS@=L
+Qh3nNY;Ew5Ca
+&Уd*ǣ1t c@4C[uH]0 = 2>,v40;'4(VaTg3Tp!ʖy?*]QkFIvUb|S̐$]9E]w AVvlzc)wCSZ:LuA]CԣeSa&P4720i>HnQ2i8-LŠ
+y <&yADjbXp<= 8-UA.gB.kMڇmhe3%Ieay"nsR4ρwG?vyI
+RjT)V'S/c@e.R {hTEP%anr0彨`>ʷ)
+؇Մ+haEќ%0eX? lk佢?Ù!pEti).-afielz(/0n[;6^$5h(USA$.EbeX^%o˴Fq3ĝ_]L\l~XX~ ='Z j
+oө`zH
+fPpfU1ekh w2cV!j}M0x)[Ӟ94]H?+vK'u?9hHwijO'#! E>u19 !l&k YdӣXF3mw$);H5D3{Q4>GlzQ8*Zz~\`T:*.LcߋLsBj@t1խ#ߤ=NJ3$*=>H7q.>OQlVbMܐ.s|$#mmzvމSB=]k~,2@goizY ]$eED׃̐܇tu$*Z推dQ)\Bηۯ?~#㿗=޼<L&P1bACٻox]M'pһo_XdidN W_7ۏ?zQ묢ט
+ᯟ~ﶟ?Q-d'owo^lA\Z9(K?{
+endstream
+endobj
+683 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195622-05'00')
+/ModDate (D:20130211195622-05'00')
+/Title (exoutact2.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+684 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+685 0 obj
+<<
+/BaseFont /GWAESX+Times-Roman
+/FontDescriptor 686 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 250 0 250 278 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 444 0 444 500 444 0 0 0 278 0 0 278 778 500 500 500 0 333 389 278 0 0 722 0 0 444]
+/Encoding 687 0 R
+/Subtype /Type1
+>>
+endobj
+686 0 obj
+<<
+/Type /FontDescriptor
+/FontName /GWAESX+Times-Roman
+/FontBBox [ -9 -217 775 683]
+/Flags 6
+/Ascent 683
+/CapHeight 662
+/Descent -217
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/I/N/a/c/comma/d/e/i/l/m/n/o/one/p/period/quoteright/r/s/slash/space/t/two/underscore/w/z/zero)
+/FontFile3 688 0 R
+>>
+endobj
+687 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+688 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2498
+>>
+stream
+xeV P[e!V!M[{Үŭ.-ŖZ$# IH 9 p* nK[]^xV]u]{cgEgǙݙ7߼*$I8L\d\{NԆUFV%-[n]>HDyXȟ:6·ᎇa-"2kO<_Y(Q6$nٶmovN++E$yMMX*ϗE0R([)edf3}f RqD*ϗ6Gl $s쉖N~\-EbҌ>O_Xx4*3Z,ʞؾ#mgخ"x8N b8"J$$"T8L8FD &kuD%H"#J+d$ٽUUXy~kr[.6I@Pip| jrUH"7
+\`Rf!m(FIjIu xvenBZ PVStƊ4 |vG9E)ŕ~jw?9v} T:~4l-C܄p?a~Do7SGffuO[7o _MQb~
+tg/sFdEvG•uFݤՀ{-wѳWk~wxOƦƧ 9$GyW.ݞ>@Cr0dؠ /1=%.znjA^&
+B$EYL^;;ZV\yD,Tvi`9X3/7ʎ\u] <mO轷7S4Ҙ&ޖ{P\A.g) '-sJqono0
+ J^Z^:P՚ 9{ӯOw %*}1g ]}ٯ䡃ڊ ϴr
+NYZCp_Ga̞} BQ:oA~?+Q]
+@9Q%Vۙ6ΒK 8wڙl6R<UH7|cn`V7 G2VkOׅQ:s i@:]/sĘmMa%<t6᪪N%efMidxDRxrNҐ\/
+aYR|fJQ7$ O!; 83q*H!*kLM!&cYyv|R[cB?nǯtqϕgbxw<Ya4p\o^з͐7R hF}ryaFOӻKv_ơ UVΉX1 0r׋хkW1D8
+endstream
+endobj
+669 0 obj <<
+/D [667 0 R /XYZ 71 735.4 null]
+>> endobj
+142 0 obj <<
+/D [667 0 R /XYZ 72 645.517 null]
+>> endobj
+666 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F20 331 0 R /F34 445 0 R >>
+/XObject << /Im21 646 0 R /Im22 663 0 R /Im23 664 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+691 0 obj <<
+/Length 2192
+/Filter /FlateDecode
+>>
+stream
+xڵk
+QU 6V>5-x'yR>wfg\D:Lj{gf.H.d(0"UO zO?^k* UfoRo|v?Mǩ@0$fJ!E}@p%J4^$*d/_"
+<(h]`I{K(-23RQReS6̪o ,32cj[a x]0zk,gs1+uNʲ*!9;}Yw%DXʶ)D cJüyUpĜ5UWl6zC,*qسT\̽g6LrM-!ys4doovup0(n;bO)Dp6B`[!
+!
+2HGgj3KSs΃}d&<z trctJ,rf1Tjn]A:Wߣh?'5BcG+ ZA΄0EHe '5.a=5A 5ru'LONrŒpR=ulAodM>`B2o"yTTY.ϕͽ/й ?dV'g>u4Sa
+\a>z`S^JK )9fJ /ʀ ?ǚ: WG"jե_'QJYݮlq&]vȱp_ЄjBy a@}{i㩄憉;#?8
+ϰr4Nt,~+&x̹*h v_;MOGwmM f=lD(i{HLFoNȏq_CZ#0zZՠQr\
+-@16n-t|`YVewicϛ(=9Rg:
+endstream
+endobj
+690 0 obj <<
+/Type /Page
+/Contents 691 0 R
+/Resources 689 0 R
+/MediaBox [0 0 612 792]
+/Parent 670 0 R
+>> endobj
+665 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./exaction.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 694 0 R
+/BBox [0 0 523 150]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 695 0 R
+>>/Font << /R8 696 0 R>>
+>>
+/Length 3999
+/Filter /FlateDecode
+>>
+stream
+xZKm7 _f-&~ɐ" !tEU0@cv=ˉx%~|ڳ_-߷Ǘa]Jm^]l\۟>ߋ_;o_iqȓZr4=IÎGofh's?xPS?u[5<O|-u1?'$-vxN|jkbo-=(lo}R?>A[MՖ<.2TRI>jb4W^TdQ~/ 0U:
+nE3QQ{874T󩔌9ٚ\DKE ®V'ckG9/,q%:o-sr6?<H@?j- l2[:__}Gq}q_K+ޯ=)>9s\_hQ]߿zh?TlљQͿ|z, ̹s'mI&v=iy~ޠg4gqGHH:ׄW9M}zrsbP3)p2rxЩIdJIZ'PrZ-GSG]©^LVA*w]J9;;ve]=V/pk<KSe͵4J[_+4n<J3ZltOj@Zi )kwpК$e=yP<,\[$3-K`IҒĒ[[Z%)1h%Npkَ+G-NDVtRRɹ$Wbj;(mC6[eC<FKic\=J4kNn(xԽyUn&cV73)[
+YVg=gZWE;qKB,]#5uk8gj%'M/h1+`{Š4uVesJ{Jϣp֑-y/+=HcJߣ^qiMx(`8g
+A0T62Peag9%JH"PhՁSzWJ: K\A[ZNaZzEKOQɝN"yK|˦** FŽZrm{tPy;„n+m_8"S ه9KrbZrjֶYAWТZZ )%sR|{PɘѠXdLI*eLQ z|=f0 n3}YѦ)iXfY '{ӳAUM \?lTU~?.
+O]ҵ 8ݔÂХ*,}tN9' <Nha1qq U/"E~|xny%,-|>}-p;~1p3Tf=oX{Adf Gb-ȞkRmíD`Y!{Z؜-{+ޭf?n5(B#@11~sphmB@0_
+Vi|qzŻscch
+U̳BN^,tOY3I49- iB[V؁DvPCt8$Hָ ̍5Y/jguvɲ2zvd}|C*
+;dh}
+B$I}SJ΁w띙np_3.h8ֱ:䑟V.
+Z@Ŏ6,DAK_lC[>q'Z}
+T**a;Jf
+&Wk_ER9>eQ׿ߓEO/'>]۵J0Wu{a񯂎?uw)_߶}'u
+endstream
+endobj
+694 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195623-05'00')
+/ModDate (D:20130211195623-05'00')
+/Title (exaction.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+695 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+696 0 obj
+<<
+/BaseFont /DVOOFC+Times-Roman
+/FontDescriptor 697 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 250 0 250 278 0 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 722 667 667 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 444 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 0 0 0 0 0 0 0 0 444]
+/Encoding 698 0 R
+/Subtype /Type1
+>>
+endobj
+697 0 obj
+<<
+/Type /FontDescriptor
+/FontName /DVOOFC+Times-Roman
+/FontBBox [ -9 -122 707 676]
+/Flags 131078
+/Ascent 676
+/CapHeight 676
+/Descent -122
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/A/B/C/I/N/a/backslash/comma/n/one/period/quoteright/slash/space/three/two/z)
+/FontFile3 699 0 R
+>>
+endobj
+698 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+699 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1633
+>>
+stream
+xeSkPW>r9-К7
+j޵
+(ЭKXMV@!$!Kȕ`DАXpQA d mwt]kغNvgu9/vvsyKS(\VQ iK#d5MD<RYC%[CQ<6FNn< lNMM7+jUj+ƠZEu/d۸hFU&SjLZYiy<WQe*Jd붭%oڴ9[QiW.ѥʲdr^SZEQ+ҪޖYjyuĤɯ(=E%5mjDAj+C=K=G(13DIRPi (jcu
+^&_O@Obȏ y?1W~vV5eNeϑ8#.= ']9
+ #L)
+endstream
+endobj
+692 0 obj <<
+/D [690 0 R /XYZ 125.795 735.4 null]
+>> endobj
+146 0 obj <<
+/D [690 0 R /XYZ 72 593.743 null]
+>> endobj
+150 0 obj <<
+/D [690 0 R /XYZ 72 295.367 null]
+>> endobj
+693 0 obj <<
+/D [690 0 R /XYZ 72 258.428 null]
+>> endobj
+689 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F20 331 0 R /F21 333 0 R /F34 445 0 R /F22 376 0 R >>
+/XObject << /Im24 665 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+702 0 obj <<
+/Length 2009
+/Filter /FlateDecode
+>>
+stream
+xڽY_o6pPXHɒH74[aZicӎ[2HY6w%EPxhD};JƓ8
+'$OINow?eTJley{Oyu&??c㋫8JK,ψ L"~2SYZWU7gSQ@F/aD8!ZlKmQVgqP6ڔ+"׫{ct"F5,FWZ lz]V!:ZXiZ[MsH%sOK5-͋r&sv̎Wm+hnurBt} <:+f<OWVˤZaB (L _~L=JJm5]a3B0 ۘ62z裻x)]X죅5=]'hp 6־]~ڇt'@=J ˛겏\_hsGG&>s'.Y>h[.€9s*4?4jSI.]*a$qx`+0돘 1!h%%ԭ[3ըʖdFz N9Bn%YJK+7+Ճ9[o5M*Z & k n{*
+mX7vGȌ\r^y-r=3oA;](L{ ٢mk}L @q"$Swb(òD޴uCmuXumBꤪ;8^@RPoIE
+%m#C
+XC
+$d ΋~XǓC}^wC"5bȾ@g3d?ss:h<Ҍ`ctE<Lwꛙf!d0h1$IIsN [TMBmTS앺ް aR=&k*g<>]n5fPe>2O34i*BZd`^e%.ҸSe~5~`>?Bqv$DcΔ)g %`K"t:ƕX(bf_Ž8
+endstream
+endobj
+701 0 obj <<
+/Type /Page
+/Contents 702 0 R
+/Resources 700 0 R
+/MediaBox [0 0 612 792]
+/Parent 670 0 R
+>> endobj
+703 0 obj <<
+/D [701 0 R /XYZ 71 735.4 null]
+>> endobj
+704 0 obj <<
+/D [701 0 R /XYZ 72 642.277 null]
+>> endobj
+154 0 obj <<
+/D [701 0 R /XYZ 72 450.345 null]
+>> endobj
+158 0 obj <<
+/D [701 0 R /XYZ 72 266.337 null]
+>> endobj
+705 0 obj <<
+/D [701 0 R /XYZ 72 130.613 null]
+>> endobj
+700 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F22 376 0 R /F34 445 0 R /F20 331 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+708 0 obj <<
+/Length 2194
+/Filter /FlateDecode
+>>
+stream
+xڵkD{EZcױ+Z*h( _ ר3+N)W!Ev,n僯z ױ#'r"PSb,~/Y} <P՛^?FafJ#GzVz;#^sEiX򭫴9Sƻ
+F2nY\Áu,>`UVSiPh/>u@(d" ՄzL8]f@D ;D0r~}M<G4.VES14@\Qy-vfh q@6 onc CdpX|O 5+0LXq4L6\j/Et\&lj
+gh$h
+'>zݑz.G6#h.prl?N~վg|#)PDOjħkiC_<#=,
+xPңh>pdz<CAuuF?rGrzl7VJ+&:窎@dJcoLUjlȱ
+j38 )!30L#y8Vc$wu0΁}ܠy5~еc<JJKӿ2[Jr8:dFY\ʤpͅ/c:2q(y&9;Dm!iDmB#ls0tHi~Č@E\ʟUIJ^Hb톜$5.!6xe lPRL ] Ǭ\sc+4<q0 Eaen
+xFLn݃g飂3~M~{V_(8q¼\h
+endstream
+endobj
+707 0 obj <<
+/Type /Page
+/Contents 708 0 R
+/Resources 706 0 R
+/MediaBox [0 0 612 792]
+/Parent 670 0 R
+>> endobj
+709 0 obj <<
+/D [707 0 R /XYZ 125.795 735.4 null]
+>> endobj
+710 0 obj <<
+/D [707 0 R /XYZ 72 535.478 null]
+>> endobj
+711 0 obj <<
+/D [707 0 R /XYZ 72 201.008 null]
+>> endobj
+706 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F22 376 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+714 0 obj <<
+/Length 2322
+/Filter /FlateDecode
+>>
+stream
+xڕێ_!-J-5]o<ą6H"]7ɿ܆"T̹̜`[={~՝V yzHC (r/~vZ{_4A^,{w~u1(N}\,Y Av< D^94Ι8Ѵ-FVd@rck~>oxM^nO0e7UyH]T6cj?WH_7×yC_7񗟟=z;p*~M;pym;
+ 7G^LSzċ,[uв̵9 R Xo9t'dg$"g~"B]?6~yq :JB /FBԾ^%!Ѡ{Ӗ\}_E]⯧ce7n."ws{"z 3%;վ@{~#L\Sd0[l{' MљKi(4:>Ck?&D8xSy4SֱH
+Ām޴<.</ꦪ< ¯du!jdVa0·kP6qQmϫ1 ekHonnOBZx<B@ ϢlU
+NCd\  );C[ѩmB+KAx?Y
+-l؃l pW0!K鋏l#fGBzL^#aO [r-Xi{
+P넥H=*4u 1XJ{WD!.SQYhak/LOp`Щ?Yo=8aE
+Ż ,!lȪFH{T6aGNqH"Ƚ 1സn .4~p?>(՜&JϚx>-S5`uk |'(~z6,Wn}j%V% %vA
+CBbg*s Ϻy!ٷ=XL)Bs'P[ۣRK+ )Sȱ=0ZDס"@¦l/IhG۴rfByNZl(ì$ އ+H\-6fa%qHKԧ7wJb-j?J Y-}C7;$Y P[xN2xsǠfZ> J#,1J`¡hBM',\D4 N
+=\J]w\_R[0ȭ!-Q{X $􁒛;@
+ .BxNSȠ0C0 2 E?gwSN2fr1t2$3o
+h4Z#d2N&Ʉ9Xxp!L
+'-"9^GK0)ݨIFfpri
+endstream
+endobj
+713 0 obj <<
+/Type /Page
+/Contents 714 0 R
+/Resources 712 0 R
+/MediaBox [0 0 612 792]
+/Parent 670 0 R
+>> endobj
+715 0 obj <<
+/D [713 0 R /XYZ 71 735.4 null]
+>> endobj
+162 0 obj <<
+/D [713 0 R /XYZ 72 506.491 null]
+>> endobj
+166 0 obj <<
+/D [713 0 R /XYZ 72 101.923 null]
+>> endobj
+712 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F20 331 0 R /F23 334 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+719 0 obj <<
+/Length 3148
+/Filter /FlateDecode
+>>
+stream
+xڽZ[ܶ~GmUD5A
+$Uq2V:z&"ԺTpA{H%h+Tgs管~g> 1EgQi2PZGww0$=5>hWzp?7O{¡f,.AIo(Ô,QIaCKqv.7Рch%`6˞vuׅ1JzR (EYKSlY49p<M%dNp#.fA䊰1
+XIj|LJz79OO4YI JOʜZe÷ŬzE%=֞Y<xyأť)mCE><k/ 5}
+C"lM鮖@ XC(;YZ
+
+ <!62S z8 UTl-ϒ=G0%K`}Ts 9Oջ3bc@W~ڐoœY;^ =h51:[3q{}kEy$L,`cb"G22YQ%qZd>+ւ(2;S|dBZ"c|]9C #?tL3)˅i|<w+uݛ8dn746Ia͟1Lc lI{#3}E:
+ؙ94|N"dIfrR*z3q0M{yeH9hpZZ uڔ[~U B
+F)h1͸KpܘڻNTۣWt/ Ჰ$d=VDsl *3 T㰁+LM&{s>p.%[9CI/} g'03֠ bmfPFW{EN>یc,h*+qr847֛&q^} S:Im;يR  tEڻ/(K+#O'O\:ȗ|od?U5Q^4-`#r".*@<N!Tc<XW:'+\XUԥ_y2 ?J90J.‹!IjxH$ҥLHD@ҪLCq,NÇ|[&rbm-G 8-:t(ՀBAUT LGʅw۠(*ВBi+B{ׁ
+
+a4ɽtxbIyBUYlHRT feΪb~ڜ)5^1Zg1v̘Dn'xyzP$rq9+eˀ e~~u/7<IzY`1- %]hmɒo |e>0u)MUG>$~8W#0lbl&ht̜Hʜ!0\26خX- OXI8S6 zb7dU$Z۰6T}=tUJK%jZU ]W6|ʞ*qW>
+W@{Yװ;w/ԕ}{g=X}*bg
+endstream
+endobj
+718 0 obj <<
+/Type /Page
+/Contents 719 0 R
+/Resources 717 0 R
+/MediaBox [0 0 612 792]
+/Parent 670 0 R
+/Annots [ 716 0 R ]
+>> endobj
+716 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [329.216 54.675 345.148 64.243]
+/A << /S /GoTo /D (section.6.1) >>
+>> endobj
+720 0 obj <<
+/D [718 0 R /XYZ 125.795 735.4 null]
+>> endobj
+717 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F21 333 0 R /F34 445 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+723 0 obj <<
+/Length 1589
+/Filter /FlateDecode
+>>
+stream
+xڽXKF rQ+^mQ`$mrH9=hDָ#)E|!\-z(@c#7渉6?y\<fؤPx6O}vSJ*4 ޿)[O/^zmsϵ8 2"MϏ'†QtSs5Kq0]8u(b_o>_߭YP(v'sC98gڭ̂]_|W> +yuٲsDCٽtVIppAC`Be*5GumKI>c_6NJi,^wqbg JY}|lëd_g{俕3jQ(<RIqBMO\HC Tz¾~AZs,]t\T!A%Yg C<k4pg~jH;*rr)$`['
+N)cL!6q"q+
+endstream
+endobj
+722 0 obj <<
+/Type /Page
+/Contents 723 0 R
+/Resources 721 0 R
+/MediaBox [0 0 612 792]
+/Parent 725 0 R
+>> endobj
+724 0 obj <<
+/D [722 0 R /XYZ 71 735.4 null]
+>> endobj
+721 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F21 333 0 R /F34 445 0 R /F22 376 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+730 0 obj <<
+/Length 1837
+/Filter /FlateDecode
+>>
+stream
+xXKs6WЙPLitC;m=C$AZt
+4JC4DQZ+TG]eU cn2/6
+kw`
+㙃ns n7ɼM
+ ՜yp݋ܟaU@45*{bR*涧KixIUR"dI Ϙ
+u6"|Y\^&|ܶ!8 5<*C I̓M .,f"G{f/)<䗧+ cca#pbxfrW>g\~ؙ-nÒJ$el4[З'Ib:N``w1NLf,\ZN`-d(d=iF%_JKkͬnbDxQEaVR!x*
+!>7k+嫤(
+,a0@ f+8B̼w<̣\`LM3lnO@/ '\픅,Ӗ*@@o⋂Afh}4R8@x,/RɅ?LԺV!\HE C= Щ
+KTO~.5> ywubR x4ꪦjVd%wl%
+]
+;-\3jfp43@0%٘PM3!&ax.<YYa13].#
+TRˋn׌ss~L);̜EEUdѓOu B 3Hiez)I
+早oR]*/")H
+endstream
+endobj
+729 0 obj <<
+/Type /Page
+/Contents 730 0 R
+/Resources 728 0 R
+/MediaBox [0 0 612 792]
+/Parent 725 0 R
+>> endobj
+726 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./lines1.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 732 0 R
+/BBox [0 0 851 162]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 733 0 R
+>>/Font << /R8 734 0 R>>
+>>
+/Length 11423
+/Filter /FlateDecode
+>>
+stream
+xݝɮ%m)ήeC}5`_(C~22󖥅jih:108$JJ/o~;_Gzcwj)M=|.#WM]z5qQʾ:c/?G+=fq}5(׬|ow޳_~O?}X̡kWN1^׶i.1|rcG
+[o!Ät631L*&^9ư䡘@M
+.?Ņ]m7l74 }lZq~lEmf5D)M`m߼iY(ej I60zH6a"?rm2(hQ#:Ki~$kܵ(1ke?n|>LbM&eB wPRX mQ f8
+kG6Mv{&ebOgoc7.Ucc&t93yuw7a#m&T_Iyڌ$D``=a"6Ԏc4ocTk5%oU2f:S2X?Q
+:{?pm.JKB& y8M꟰]En>(v:c䟰35ejj5mmz+(oRw2dp KBƌ=|zh*
+(]<MP,k&7~iMl1FDէsKa[>&$c3k-w<3ʔ ´" lve>Nwl,)yQ
+2mc۠wldJ) }Yf8a{5"z):Blة 0(˘sA1)ܼ 8fjY& hc<Uֿ}  Ά
+cŌm *R p9veo(l5%#PBb֧c%[PlD0j6&jcZqlbjz8L#,y@sq'a-n6+eۢISBǵop6u^&ۉRFr(ڜL(tc⛓][̣ʵ6kBopARКbٖn7GhE $--ShtЛf3}*OyěMx|Iqͧ(rJ;nŚx^v&7ٰ u_?Q\Q{ވ1pI6[֍Q${aYNKaQ:°;AܴC %TQLc\;7^{vFGa{Y<u%1{lYƨxEY60nYS,<39eHː]2׻] h.%z463e6cm{ kmbZ.rrk`lQUnG Din<7n kmK (fQ ^)O;t]eB\.CSWsn]/2Ka^#,MZFqTzv+T Jfe12!ٷǜ5ʷ3Tj=WJWcy0|XF)\i۔~lƂ+X7ƞ
+>I]}6#46xv]~֧ f0 ,4iw'GȢ _cE'Wb
+2Z܄ [\3,m8Jr'ۙx {%c 7q&A}D ϱG(. c]67EdD.i.S +e ]xWS%%qD\`J%,c$̋lL%P;[`1 W\ GS4)
+d
+<b;F%_:\Ipo
+Z0-!|ƨ9:x
+<}ZPYfM$8mx٦@B$\4+)bgWu fɈoۍ <F(# MR61h+M YTp%.zU
+ UU+?3A1R/EUFS\io:ҸE@T?QTңv4N`mxRV=w >QL:ks=0Aso^Cvl^v==8=:iFf A+z25C͇w`޶֛mۄuC
+oW}
+ &_RܻL^%MY'!p2:;3՜b2N0'6 ;0196G98/2ZD\5 ̣:>
+:ꤚbJ'60/.UlE
+lٛ.;~ɢ.R"e{z웤ÒF)9rNiJ̀uݘĐqY$2ʆo*j9='2A\:mv8|j؏m wPxCbۭN)
+QW4F<9*SaZkPѦӮK)6m>}P&}+u}gwRD/-l"̯N^@1x Q̃PfxN/ľr
+k M,z)2yZUN•rBPiBh͡~ﵪQ:޲|b}Qփ@) )BYL"3,2C׋O¢Aֺz`>cB@q|sqaR<I D0A@" 3CT~616 .e8,x:[jUD׼c%C!Lr&`y7W2$,RAj˓Nz&( Sf0bζKnF_Yg0@)d>D"$HΡ&"Q:63OjV*U(K ";SannOĎS7 -(3Q21%8Y2ĉ:=UoMź 7Zl,
+y&),a|Bg E>OZvOѦ
+6&mfMM9Lt2Ɂ^ Ue!V<Xĺug˾X=b_.g'cH)YP7ilSSpKiŇ!U6;
+?QSbN7bd3<D12q9ql>wI( NnEJ ϸ3=Y5`nk
+^^hAhB;Eў;BpRug(LWmb׶(Ƿ6
+'!mtD1 ! +8ǡ)$<
+uO%LN+l
+EcoLBY{m7`f\tJWG&tz(2q±,]y$- $0rM`Kɛ1 ˅s=68NLiCڴzXQGsH
+C7dRSd7<;{J em,98bɁJb5Xt,Fvw$lLfŸ-xt`Gu⡸E!+ܩlיּ͘/এb=&qGIZQBY ȵTfl=ȸ@o[-';)+M <^F wDN:B[`A]LQ.bL\[y2Tb/ZBCbA^׻̸w ؽM>dlf&E- A㘣*QB!&
+8ȕ@lcX%F.Ҏ@: NqJؼUX6.
+U6tǐSCY EV|(4JTձ;`^
+77:؟(ɚN+ _eh[}2eJ)ێsʶ?(EwL;ǢN' i~\&}\\i:|6w7cy0,<שqlz ׁD%';xaUXA't񰛏0.Vo>߽Dy\NŽD)po0ԯk~m(辖oѕ0_^HpdWvJ
+
+ѿ2zE.^ɤ8*nrL.-kipb
+,S8"DMc I[c`Q4IeTsFPH.Ma&CT6]N\;Me*Q#=0[Y» Kr`}@dTz_3Id3~GKIaQ~QrQJp
+~)SU>
+ uQ
+E ϊ`=gxNGO]`UР!ZdPe1LAI8"[}Laf`-E ਸ਼Y DK
+\PoUY^wLW(Xj}S eqʤ$qV"rI<&#O{P6
+.4.q)"~ g5rUY)UI{)7JW kt$5 `peBY]c
+ں$Z=Lw;E0=ݾ&0$dɗ{@޲w1Jq(UdY$D$Gn0T/wh9d$?'Y^7iB#wg$ALbv՝ϭ珝=NK-o2.qByC9`@/F.g>!~^VmyϞ3ݜ
+Qb&$͉asͩT|I&RT(95{=[GA iCQP#]U2US,N#PKWOESAΆ(qpi1Ԉ%DQB>]H<yU&Ia+^ .2?}^SQ(J|^^޸rLу:G7&@yPa& 9ĩ. tY$\VKeD˰9on#X>j<(XU O^ܱ2'v
+n{ k$֧VQ#<bKcXz
+\O"Ouӎ[sěR$dćԒ_K1MVk]'Tl )^Z30FKO:ZsX5OK0}!ɗHVŻҾ})
+;XIh=]u|\ƳDfyoY|>KØSp$YVd[-|^jYO=^jEȇKxE2%21Y7`Y{IdMa*
+Nk
+yǓ`-B7s`zDgհ}^utPlot=RBt{u`%ߊ| OlK۟#+QOq{ b-թ"D-Ga?
+`)wYғC"_;xLB6NsǯʋS,|Uh s@_!AwCG^ 8a ίGH
+sKnN)Q`eªɁU,8/wMhrJ
+(<lJ(A]j"(A?#K8?W
+:$nɺV`,P]QvS??>#|?~[||ܩw嗼|07J}^75C}D6ֶN$M>ÿ~??~O!x!aѮavv~M;X R}3?ҁE~$ ץ4K_a. Ge=:K=k[!8@@!D`.`<*!*,쾦hb?^>Uf8]/XR*&ꯎ3sG@my|
+endstream
+endobj
+732 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195625-05'00')
+/ModDate (D:20130211195625-05'00')
+/Title (lines1.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+733 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+734 0 obj
+<<
+/BaseFont /BBUUIO+Times-Roman
+/FontDescriptor 735 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 250 0 250 278 500 500 500 500 500 500 0 0 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 0 0 333 0 0 278 0 0 278 0 0 0 0 0 333 389 278 0 0 0 0 0 444]
+/Encoding 736 0 R
+/Subtype /Type1
+>>
+endobj
+735 0 obj
+<<
+/Type /FontDescriptor
+/FontName /BBUUIO+Times-Roman
+/FontBBox [ -9 -122 707 688]
+/Flags 131078
+/Ascent 688
+/CapHeight 662
+/Descent -122
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/I/N/a/comma/f/five/four/i/l/nine/one/period/quoteright/r/s/slash/space/t/three/two/z/zero)
+/FontFile3 737 0 R
+>>
+endobj
+736 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+737 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2087
+>>
+stream
+xeUyTSϐ*D4ɜ.u: .8XPqjH @!$\  /,-bn
+8K3Gme9?}G$=Hyr\}O21+8F==xAOhXZ}Э%n2-&8$6SϤKՇ#׬]/E'"%QHRD+CD&OM(B2(Av&5Q!;uJr ;'$B2ij<C:dhS`cs4J!>rQ<X&$dqo!tro&"^* ^nC@Mr Qać1"M|D@x‡?!h-$|Y$O8ien޷6sE=s3QۨL7zv'pce54WdGM}9@Lvjw
+ | %2+W,i"cBu9&?}>Ne~$yTfkT 21m<kVk
+]y,A^[k~;F{#6VζcM.74\a<|lȌç}39B'W",*yFA{,+g<y,(.,-ɫ3^PGKMWU
+k[o Qşys pzA"iAvNPPQ\U
+oJT:)< 1aCC Wn
+s|/kOi(33r:1DAzא;B, w?}b8i5\;~Iz^}HÎ5\-EyFB>brgiEK[5[Po7:u 0/9Qs5o)~ N^ozߢqWYNmL>_ՅȿNs-x[qGgoC!^PVmw[I=&L&mI<>'$
+>
+eY*
+Tk _B5
+endstream
+endobj
+731 0 obj <<
+/D [729 0 R /XYZ 125.795 735.4 null]
+>> endobj
+170 0 obj <<
+/D [729 0 R /XYZ 72 702.645 null]
+>> endobj
+728 0 obj <<
+/Font << /F20 331 0 R /F15 325 0 R /F34 445 0 R >>
+/XObject << /Im25 726 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+742 0 obj <<
+/Length 2199
+/Filter /FlateDecode
+>>
+stream
+xڕXݓ۸ ߿o3+$R_t|mn&C̵lҿ
+w:c2d;V/5H)l}Gj7g9ItIÕ1QݒH 3ed]5 Ow( bCxl.>@Y09x i;`n
+;6^ ]
+  ,ub3$ ۮw@2D3!6hneRxEO"$ơxBDj[N8DplUK誐Dy1~4JJ# ^S ӫT f7fPϟd3'rm;wܓ6I3O?'XyOX,<K[ЃʃE
+,'2`,*@GAMWG/%uGIq>}0~ȋ /+s.u
+rhU)ŋHƁqhP4$- F_W!FK#VݤZOAWb>}7mflW>S#$g+2 k<;c sㅡ]ewW{̸43KF!z951pi(Q|Qb)^X :s#cҕe[N11jcMӧv#,FN >4j'U`PG8Jw+qAfoUЅԌ`h[,z|\xo17=r5O{bpj{C˧qQwf4Z54Zwd(_׼:,yZ</}&4[zyHrEKj<-H_kNw8d_*컁NS;C
+endstream
+endobj
+741 0 obj <<
+/Type /Page
+/Contents 742 0 R
+/Resources 740 0 R
+/MediaBox [0 0 612 792]
+/Parent 725 0 R
+>> endobj
+727 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./lines2.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 744 0 R
+/BBox [0 0 556 123]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 745 0 R
+>>/Font << /R8 746 0 R>>
+>>
+/Length 7297
+/Filter /FlateDecode
+>>
+stream
+x\ɮ$q[S&'XA Z@^fQ >
+< :3V_=ߟ^ʯ~O_>׏.V^+ ٮ^嫴_5ee壎6P&~'֮9rqϹ{MkoWV#g/W^6gf.y5kt /c<ڼZ
+} =*6WGv XAjFl+CdK^+㸋v=?!_+ ~)BW`y座?ZZ=71eFj,6K\Rxs@g*'*Gtˍl2:TʳgV:Oy@8n(Va~df#[g[UOU#|/O6k]mo3SK}/J2af5B#h=e[
+
+tvU4 dd3~{cũcA3kdY*RlTL^Q/Xt"lgގ^6cP
+iM}/MaMu#|}\Ig( ڟ[aؠG(OX
+1^יב~׋ǔۻdp ل+
+}%? [;,6SӜ"JCn˹_{ ! q6yIx.)S!ekW@+a靖B\6V)xBA,~
+LKƑ3܃jXNqd -̡9Ox2lu%fLy9L28ճIpz‰XX(<.N֧{׼S! ^d!Q7¨"d)_exBz&F1Dap&I+J᪉B0!q@F{ZΠ89$_,g\ ;4<@-rY)YBqB@1U8Vpmpɰ[?BqxǔreSR@jfB`r{C Xse7
+1.\)
+l-Kl!<RX4)W,Ty-
+x'jA# $H%3\_T|Qj
+7<oG
+IL|J/;ZC
+ e} rF',\.)Gũ#܎+c-TLQS;1VaQpT)łA3Z݁&ldS!-2ga)}~
+`az,Z<
+rH]5葔ڃzil1!+uG}n-qYt{5J`2ۨȣ6v#<ϸ)2ykTj{D QoF\+m.[F_|% @}PX/X:+oHAFh@3}3B@I'\ h5K-.xYK
+Gv"p~߂ yjXN-cBt2(H@T^],x67x$)ANb nȊ?&c
+:c)
+8DNmȪ~hgmHڶ)MVY'(EASTd3r^7j=%$ x |&<җ2,#8jv@BSweH],E=-: y=L kn3<E T]
+bYdˁaV ˎ
+O^3YZJYQQelcT;d`FcIe"+ajRҦE86OH8+mF4_䶉, H^Sf
+<U`5iQNaM6r@";*50FNC-~4s 3pT o|&p6WR
+kLRAH4өa,Ժ( KU1
+\^
+eLLQܒ:D )Z`b_쐊@yH@ xH:N$ŒwJ.Wz ZOPD AX4ګ(RywE`VI^y{CL{i6ϷFfG,~"&moUxXhonvP5'$H\i.,ωH[ J\:7
+;Z Ks eb5}E |C!$ PRles
+~G(Y#B:LI "]R1o&Q=?g,kz"Ms
+@ĒPbff#7[ɤ`̌$szD]~(=5xGp ]Y]R vut(xDىn F(F@1m
+Ff:̧ݚ24y&saH`IL;k)fvAQgOZ0RWd$XVo,99{}<#l>PڟOd=gA[D<.>A6~>BQ{dxӉ6r_'iffR{7CTMl݂dEt"ZٌnٹlXO߭kVu)H
+DʏDzoiC8Ji5UZF3]&!NNرn:`шD6EXh׍6=Ri7c8v$.?j$q:Z-^DIx0 @PWNo>ӯeb8dU%E(cOܳ~Z<Lңٵ>y;+<<穏<rkSX&Y%nCG$=TIܞMr~&ŬLJd>&^z(V[YST_=0I{@`nGhs`ިQ5i8uA65Fh-H#@U΋h4ݘѭ+nOG^\U|c!L qvU!O"/+8L/~#†= :iWU'
+DU
+DkW(0*9?}Hn79ʎnYc*f }\-zl&Uc `oB-G1g0hm
+- 6[FJr" qUmS@0 )2m.Hag3 w@Х`\$?i
+B}[bErF#AUOWRy-{ -ŕf+(({k [b3K"끬ʏ
+SQs~i=Cȳ{W'N5]t*A;r*?1: ]~qn]ώVd@֞pqlLK 0FeMz
+?e
+60`]B*lM<VTaj(5^FU+`-sAbt
+l2swP8#O0 ƫ]uHq:9Hme1 {Pʫ˘'s/Δ[ =v68&S3UߴwEe
+j YMm~`n?67+FF6Pnd^ uWt?ꣳUno3Iu['deS|}bVq>(AK׏ߥǏ{͘]w-d.K;egOt]/_p?Iм,
+endstream
+endobj
+744 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195622-05'00')
+/ModDate (D:20130211195622-05'00')
+/Title (lines2.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+745 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+746 0 obj
+<<
+/BaseFont /PSHIQD+Times-Roman
+/FontDescriptor 747 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 250 0 250 278 500 500 500 500 0 0 0 0 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 0 0 333 0 0 278 0 0 278 0 0 0 0 0 333 389 278 0 0 0 0 0 444]
+/Encoding 748 0 R
+/Subtype /Type1
+>>
+endobj
+747 0 obj
+<<
+/Type /FontDescriptor
+/FontName /PSHIQD+Times-Roman
+/FontBBox [ -9 -122 707 683]
+/Flags 131078
+/Ascent 683
+/CapHeight 662
+/Descent -122
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/I/N/a/comma/f/i/l/nine/one/period/quoteright/r/s/slash/space/t/three/two/z/zero)
+/FontFile3 749 0 R
+>>
+endobj
+748 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+749 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1913
+>>
+stream
+xeTkPSg>\gT3hXmQX*r"
+6v `b1X 0lۂa<E H-m^t^߱zY_O+ٷ_9g8}s
+B ̲RB!:#5HE N5 M]Aw(%MR~_ aNTI|
+PhfE7@{z{ڂ~:wwF1tlX@c[]'`l׳07 Rރ~6dcy+J$yK;6V֘F O9]Xx+RS9WUT
+/
+ܘA g!quDX LE
+L\,]eI
+ꆩ ~{%="硻xK5@xܻi6UÜ=Z]^/ǧsp^)P7I4u/߻rJɐ39cnC)QD+dfʵG7E%Pzo6o H
+endstream
+endobj
+738 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./comments1.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 750 0 R
+/BBox [0 0 848 157]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 751 0 R
+>>/Font << /R8 752 0 R>>
+>>
+/Length 12949
+/Filter /FlateDecode
+>>
+stream
+xݝuIr)lu;D !@Y%W|+"[M,Sh?qraŊ8I___/GL_}}]?Rj۾RZˏjZ㑔\?οC_e~+z]Ͽx}_~Vx?95#)?9?]z5ˏYW둌2ZG2^ϹÚ+]8qH[;v>U{`ۚHN_%ٓJ_*_ٮ_96=/$sM&|aWIkBrk/?[<8w8vG5MVэlt&gwtu]q$6J]qp>ߣ IQ9w5kp;;Z6呜MUSMWj_]۲̞M?=_~uBrTlwSw8풾֧~=[_t[6Λ=ܞֆh3774{۷Yū֯<>jGS߻RG(W_Befk,嫽kQC|~HwxC<R j[>qƴ J-}jIIp=fON9=MӵԾl]o{L.FiK0L2ٮ?=f>mfSڠm6lU4wi((C;i77ӖmٷMm>[җ?\&[׬2% }xdE^_23y{:߅:wl2jw9& }3Mo9 ǴͺW2ʙ~[fo: WB!i*ߝ&ɹ^۬eJ}Vr97i\ Mdȉҭ|!L*J7}`/
+.s,Ԩz[Q/R
+im]m6$%.M8bsb[V$Fb#B 4UZb{H9&ɶs3B;ž(EbkIW(_gl;Kt& JAbIE%lrB)MpzMր׳xM3IbZI=NX'f=4G$vcaL;1)R-(جklt,Dz0s 1-XAenl#U2IZC|ôrhnyuר͎+ilrv %`8C(AGef0K[Žz$M$qTGd$FWPi;-i6۪jzH=:lL)!b
+1&͔]1.-IljPͯ!g]Σ ʼnMSN+ڞ<զЌfP iZĶv=N('mCn2哶R`iAhMیh}l;F5#O߶n)>+@PčIbʾv4)E@>*̝)XYaSL}}E2\WwaMߙA~OzeId)H^$Z.pbpY,e>ضIDssۘҍI_=n\4n*orm$ѐU
+@)̙o[֥;}i6 MK
+D@Hcf7߱c1x?rkll)ۯqܬ/c$5^~9 _: ! p)lL-\5S q؀>Ms+U? G{-Y%IL-W riJ˱̍AV=KhyuS}c%œa}"Yu*LNQKM9a.v6y-{fGxFC~frZgTt|cL_QΫ{
+kьx#÷EIlrN&2,<=wm6Sh5u@İʓN\D!.5N=moq&.[6f'{&)Ή&
+а@P:Ι@dHLvQ.p𪃪1kvK&ǝKj{)%*O gIM^$Os6S6%X7(Iоyr
+4ͤft!qzE37l4N؉؆+&# ?K$$x+)U&5 HUM
+5v R8H.nHY(E81%>LIoGR}%|L xL
+T0\Cl؁ 2\%%1
+!׻q33o x.Mwdj*%]*Kpe%2Áfp *k9M\ǿt4kN8όlu 6_O"#iAd7;:tIw:V4'pvΦxFW;6N;dR ]ɱyx>Bm(z[D0a ۓ{qhKݹcoa:'ܒO&f<VAFfVzV\؝=*=+.tl|f+HqWL5QM.6@.iYS CFXC[4D q-f|."S3
+F>{~XRޓL#ߤθ"9_'L%@$ɑw0-ROT*ahKڴgQ\$;_5N
+#?ˎè lPM"x*WM9栆Qֶ$AieL=>]`:txAm8d: &!B`!UmI4 4dhNaiRD/ |ev_У.Da1 hu7ɐ^LJCl_IwnI+ӰyE >
+(9p5y^P͙&.wjOU^Lp[Ba |Y6 㜜c!$hh-GٕwtA|JPWmR y}
+w?Ra,XTUvanoYq`AW4nL+EWz!
+q3{!I/hisYL+8d4S P;]d6$-U=z(U#>p#)4*q]RB oIH0x]E:oY7pg-H!}:U2ל L:.Pcsw$GZ$h+ފ
+T|#;,ʓF2<+*-wE |`n<zWcC(LbTalRfTǮ
+Na(%ۿoD_B p9:J},ǹD;478ǧ/=u\xYjp
+f gMHS[ܿȑZ
+[)m|[,Lt 5ߒ)b
+\o$ 2-3~?jrj>CZqjQ
+'4F-d;vvn
+ ݒ?<֬~W @m` .Uy[B7ߏRKg
+`wT9uB"i!s sZb8" njc\ǾVQ 쨗BiV@xR#/]J;|`#1޿ pG0r>tYo60[b^Ո*? m:}ϔ$5b P/SP&Iㆺ)iLY $ӊ=SlaL썥Z(2[zhn3{wnik :Gg+{j'`2$"svPA_'Aw7iTL#ܥCśpRj
+F>՗Z 8v[)ѷq ޓu0(GjGW{xCyb$k/ࣥvk*!<=t!\ 1ıR,ο@qBCu!5iHl<@?֪xM qM]zW'!ē o4즋>{x$xX4dl.nxsp^5j:LH Næ
+A7u8u+ o?3$#
+jP 7uYUlG UMɄQ^.T*["z(s[\d8Ds|MV'UTTSއ޻,ޕ 7Ս$\kOPxDmz.bǶc:{
+]Y.v#A#81)++ ޙKSosAϗ{tZ ?5ы) Ju>M f KIvM6"R~ْOS:.cD*nj)AZ;Ei\bYaaRՈj]~J-Sͮ8X;fcLA\AT wVvSTOU`ep<
+Cy+R;OT%IK_ 0R,WdZ~)}ܭZ:G쉪'!QjI4r)$"sW܎g~'yg{Igr3J7y(b#;U~,;I7pڔW0<ak<w{W>fwr(+@"0LPd٫>Z}p_
+
+\^L}hh
+m/o5EvI76.I`kdR.IJp_LSMsmc
+67%m{WgQ{Wgah<܄/nY#o RUk75&&F,%&Vjփg@Q2N;5e
+h ]PADITK+-硱Vgv$e_̤[旮:J?,ڦ
+A<s#=hN-!X%$ S
+~O3Xj?t
+4Mri{rnPBa#Lo3Ȣ SY3} Ӡ5h|DxI#?$CI.J4 :;
+Nx zzmKmO:>n:R:Ct|q,v\ÝbV֡( ^?7:
+p(UfD\B\@IbHեP(CV2q@EQ,eȷ#M:l ; k0`p@&4 ed7AU##@ݦGwq-qWΥ{2YR6QJ7f8{ny7L[Va{*P&anQ6,p?V`#ba9#M"##W@
+JFU"IWtBJd-_:Nx@dF>=(x; †go7xj85 ՟ЫD9%0 o=
+6}T̖=Y :SPm@h;"rgDkB^nGZt'd&pc AQ:RtQL9@{{ 9oIU4t53[$I5Vh\z%>`+esK}z<}@ ;<h5['NhSi֠pX?k-n1𬷅aS gO4 @~[
+
+ݡ7'Q,HL$謠;䊗Dj9~(2zNX?yxBET\~Qqe+{8* r@=~;ÓnCRL;5we ^翂S>a(O厖*譎7V@%'"U4m 0i^AtuK^uzi@
+.NhMxъu}JIuP)J᫸6Yhg;A79agr6-IwN(rZ b_D DxA Fp[tW/ela.z='{D@0Mi4tO&)Vth[WvЀc4Z* >*(34 zoRZmޘK7Hm3>qT `YuZئ:v 6Xqtv-1))vA5U|R]Ǡ)JPnȨEwnBl}IO`DS)%si ?SU7TB7<z2`]`v7F{eWp_pHNIf%SxGTV%nI/Ão;o8dx7( œ9_HjPo=Tt jٛ^/ㅃeB,./O*y*WQy{5ЊF.x?@shN
+5|$z-C@+`\c3#`aH58(Z0ȣgnj,!&ɫxx0554\^\'^.Q)GRk`$i٤2Ki P%vq}LCGGM1T+ɂ}yIy [0N9\Ig -i\O?+F <krtM7/Yja:RNj с7mBn{ oѿgt u<)ZKg&(<MS)># _k٧f&\-)^H:RjټVm82TϝO!iLnW}T;F_}iFjtRm%PIŽq/¤jeEv/
+/sы)PP%’;kp,A9FzqB:ڧpLtN\k َԯ8DŬqU=g:m@G|7ebO?HF_-lKfJ 8Ytu[GRqD$cت.-{ l vsY Aqdhbu'Rh*S[
+endstream
+endobj
+750 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195622-05'00')
+/ModDate (D:20130211195622-05'00')
+/Title (comments1.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+751 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+752 0 obj
+<<
+/BaseFont /ZZBBOZ+Times-Roman
+/FontDescriptor 753 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 111
+/Widths [ 250 0 0 0 0 0 0 333 0 0 500 0 0 0 0 278 500 500 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 611 556 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 0 0 0 0 0 0 0 778 0 500]
+/Encoding 754 0 R
+/Subtype /Type1
+>>
+endobj
+753 0 obj
+<<
+/Type /FontDescriptor
+/FontName /ZZBBOZ+Times-Roman
+/FontBBox [ -9 -14 775 688]
+/Flags 131076
+/Ascent 688
+/CapHeight 662
+/Descent -14
+/ItalicAngle 0
+/StemV 116
+/MissingWidth 500
+/XHeight 460
+/CharSet (/D/E/F/I/N/asterisk/c/five/four/m/o/one/quoteright/slash/space/three/two/zero)
+/FontFile3 755 0 R
+>>
+endobj
+754 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+755 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1978
+>>
+stream
+xmT PSWא{O--i$Z-+][k
+B$!CᑄWK=X볶b+Zwu2ٛtg7B`8(rrFa9L4niIGcy`(WQ/P+ǍBR/Y*୘_gպu$H:"W{)4yjynV[R(Ty:Izf<3m_J#٦T)4e[ߒ][&)z?%Iu]\Wk^0,\CIo]z;k%[-boc J, +ثX8&^Ä| MX_5gߜ<=7͟O"; cG]*OV.x?"X=تN]aY[2چ
+Ě̷mۢ,HF:s@x…pn)D
+?JTpA(VWk 0\L0͠iÍ 5uѝW
+ehniGSEP5]kQfTPQ܉17_h G&Qxgsx<W}nOy[䩀jwIa"5˸s<T¤
+M%VeDi-N8[Q&[3~_CkU'39G]vўQπ[Aj,LVNUkz,mn`(] =R<`%~c>C 2t-3vq(msDfh%lP >kkcnq=5Wo+瓖rh&^` n ۞"SpnN+gIȾY}i|o2<Gz/_4XK6B<"c$k2QMBtwQn
+8o3xڲDfA>e)ߚ1<. osܓVc7Wr"uuDۆ;c=_@p}LKA)ZZ@P] Z%%<!x¨m1,#wR$`w|)dr~}o(hUGvUpsIN8{1x*rVrXE:.1I[6LV('_[
+endstream
+endobj
+739 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./comments2.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 756 0 R
+/BBox [0 0 590 91]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 757 0 R
+>>/Font << /R8 758 0 R>>
+>>
+/Length 3629
+/Filter /FlateDecode
+>>
+stream
+xZɎe߯8;@%xׯ a`^Ajio\ˇ^tH DCz"W|~zJQC|;HS}j
+VB?^҃^7Ǟ/|Hlg͐Bl}?^kׅ,x/ -k.?_R#t9T%Rc
+}<({?^MJ7Rs ^a}y"+H E1?^ۊ,+
+pJO]-dVZ,A7Rn=]_+Bm{ic{X#{O~,`SyΑ$z- C2%F0/&SY 6',7s#iZ[m!;.eK:-]7ZAQVgZ+[{\VLdYV{')qyeDrlǡkCHḛbY`}_d"۴|}6Ldٸ ;=.dr-@*s=PaI'%Bi{ic;X{O^k^[M5T=h@PFo%h= F ힹƼm}gd33WA5sy&ږMڝE0i(s̬1wM8M2ޏe1;~<dFV=G=S|D3 `TMbi&,6aS|Rkٷ'qʰA^Һ~< GO'G&㬸F2uU(Z]˺oR0Xy:rG
+V
+2#-JR, ѪMNN
+
+3#V`V͓dZ@|N
+{Pև; kgP_\o5=i%ߜVY*6Wyr?nT,;P5!ʦT<"xͼՓk#AXZA
+}LWV+$qm@ʎ=OՕd&<yQOI>eZ̿\ vȧ3("zrpȤ9 9GY pUƌ ⵝRhB |3ɉ+Dt
+<r]$QL> b`
+GFwE۔[l
+hs}pJx9KXKkz }(&-@M:[:*SA nO;RЅ@t>E ^:gD.< }ьՑ
+endstream
+endobj
+756 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195623-05'00')
+/ModDate (D:20130211195623-05'00')
+/Title (comments2.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+757 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+758 0 obj
+<<
+/BaseFont /HALHIY+Times-Roman
+/FontDescriptor 759 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 111
+/Widths [ 250 0 0 0 0 0 0 333 0 0 500 0 0 0 0 278 500 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 611 556 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 0 0 0 0 0 0 0 778 0 500]
+/Encoding 760 0 R
+/Subtype /Type1
+>>
+endobj
+759 0 obj
+<<
+/Type /FontDescriptor
+/FontName /HALHIY+Times-Roman
+/FontBBox [ -9 -14 775 676]
+/Flags 131076
+/Ascent 676
+/CapHeight 662
+/Descent -14
+/ItalicAngle 0
+/StemV 116
+/MissingWidth 500
+/XHeight 460
+/CharSet (/D/E/F/I/N/asterisk/c/four/m/o/one/quoteright/slash/space/three/two/zero)
+/FontFile3 761 0 R
+>>
+endobj
+760 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+761 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1862
+>>
+stream
+xmT PSWאSlMUVm˪u
+j \Z̯WRF ߇n\ym+-|v)iG.`oo7Yp0tӨ8'>2dfG=Qjy SƳ:I86r/T3ZfEwa
+}?Bh-2
+%c7{Tӣ!8Po;
+i=y]ϛ> 6!Ȁ/1%K C NY冬P/-á޺Č&/4-ıZ&`mC56 tg^QhE
+d!*l#g X"]b&IZ|tN`mC^]v[oƥ0DKfQ;WJHSiޔޫ`-,7gR@873x@.Rź_TMޝ3rRшU*5whgv>w`>TVf:5ZMFbw(nLyȎsCP]HY;}.>=^aB
+endstream
+endobj
+743 0 obj <<
+/D [741 0 R /XYZ 71 735.4 null]
+>> endobj
+740 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R >>
+/XObject << /Im26 727 0 R /Im27 738 0 R /Im28 739 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+765 0 obj <<
+/Length 2622
+/Filter /FlateDecode
+>>
+stream
+xَܸ}vau%Q' q;سC604GZlSǓSR SEVź6M껛g/T psdE~'zw?۝Rʋ.rW7Q駗?"2_]囟˳a2'ÀI
+z-rV"
+$fgr h36W5i~ S1]LǦ
+6mG]7 C,%{FIoADDδX]/{c/X:_CSHdAC`E[\ٳraJfB4OgAS;qX@Z`eߝqG~0FYY3gZϹMSguwd%G,|QXqNdqz/PC})2A
+7(.JH]$3c iqQz"]>I8`
+/1Dk
+Ú4|n,XVI봮BSm JEkDgmƪ PMTi<4Y9jgH#H携8Ѧ#Wp8!qh$q#!Oc}]%lTZ%5˸"eI=J%ĭœܛU_[xmެ@vq5<{y¥K#d윓u5$z<dj :r5CI-Fv- ¤L 3|R&^ D5M߅g1\Y N
+%v$ODE$:75ϥ Qɟ "YjBL˸\`&V1b3($mS5C W2jV)e%P CY $+߀9b@(TcҸp!a:̝gQ&IVC`##\>WRͬ G
+ ȓ2^9!$GS<\1S
+Q9<%5N0LЖκ'ЇVH &ў=;+Pi5tN
+(M1q& D :KhXaGZ. i*6J~mJXX+ w[
+X
+Ӱ$̟Jp`
+endstream
+endobj
+764 0 obj <<
+/Type /Page
+/Contents 765 0 R
+/Resources 763 0 R
+/MediaBox [0 0 612 792]
+/Parent 725 0 R
+>> endobj
+762 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./smallscanner.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 767 0 R
+/BBox [0 0 454 103]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 768 0 R
+>>/Font << /R8 769 0 R>>
+>>
+/Length 3652
+/Filter /FlateDecode
+>>
+stream
+xZKGܟ_= !6H";ؑTu8 ^"/|Oy!]_>>}ۮ=ҞBCNWAjjWk"ˣׅ֠6{ݗ? Z3rP5u"P
+_d)?vo:LDr5+&ps1T2C/c}Ʊ*{D-8x"%`ܹB Ic~~y܇<\[w&"Rf\m2ˣuOZ0!ֹx\F
+1&G^̏psW!l0 Lk-j!g*TB ǽ L{sy5OxVi{9r[s.d׈88aNOǭƞo_KM_ϯﳭ_Ttk \(kkLt$ [aT~еbføUiqn؎_7[Ұb(rug;~<OI12NATrTTϊpKͷY Nhj0ʝO'!KuY~^V!mk \26 Y辊0N m3%B/5jw$$WG*
+!8y@F:&aVЪVcd_gAyT#[s ޗ=sOw;HqDCT 8ѽNE H#f\nvX4]h;]fH+#RylE$_'²H0@g|덠!2;32kb+aXVt>A^y122F?h/Fht8ǰ0is̸lTŦ32ށ
+r30\CW|DOefߟgA.`˶88+UYaBE;1YRY)ajqPL3 VC<^;t;2RXiZmB7!_nDnp $%xtP5C;]-ݐ|UpDIn >6+YAQׁeF,DMj@ ĕ`]|Ykόp
+䕐,x<xc|pLL(DM@ |2Ig_G,R, M@De:)oIR$U ;C
+Λiz3:L"!R3#$7hB$~:C8g,PĪ'Ơy3&[xz V8 X#Ey @]lp 3ŧFW M}.@Z#
+=Ǒ`HrVhըKJJ#`h aq&)O3K9)31.zeFSFe AGuX՗ h[,! Hf *0\B'4C\ڛX0PT~G R&%%U5@vK i^X"B0ߩ X!v’;؟ƚjeecvr-+8П }@2338 Iů4T?Wk<#wy&lySa`DsX,>a[|ɵ,#s@ȵ0vr3eFndG(j> ^L[2.GԦƫ ·[O|0V++΢D; Z855plGF'ԺW'Zf@p{f|pjH3J\<(rpY|]*nJLi8h3jMd+TDBQ"_Q
+%0Q RaΚ"MŗTj
+F9 u'zd4]ejϰ۰2k @F/z\QA Gp@Ep`(:(č4*H_H#u^ X?1Vv$2Ivϐ
+;ey-6{-ÚE8dX 2jJadfJ#z˰ZKbɶeXeW!¢i@u).s}MD2NiI&Bl!fBb4Bfx=b$ϦOa9XeIAw @\]jfCEwRuCEY^biD?n!V31A S/S3_CU[0UڳCKvUvҞ9sVsı.ױ7N㑇NVaQsSi*a VNs|. ߋrȰ@(瞎;Z%,Vź)‚KKcCUa˺$X>g`M5]RF ֲ. '[U* ̸%e0R7.bJ
+0`,>8` `pCUP8[UVb=[- Vq* X$
+m
+W#&W+~ebnHIɖcEɔ&}*Wzu}{}O}O, ٳ„?8q'R?V|}z|+˾S
+endstream
+endobj
+767 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195622-05'00')
+/ModDate (D:20130211195622-05'00')
+/Title (smallscanner.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+768 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+769 0 obj
+<<
+/BaseFont /JNXHXU+Times-Roman
+/FontDescriptor 770 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 250 0 250 278 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 444 0 444 0 0 333 0 500 278 0 0 0 0 500 500 0 0 333 389 278 0 0 0 0 0 444]
+/Encoding 771 0 R
+/Subtype /Type1
+>>
+endobj
+770 0 obj
+<<
+/Type /FontDescriptor
+/FontName /JNXHXU+Times-Roman
+/FontBBox [ -9 -125 707 683]
+/Flags 131078
+/Ascent 683
+/CapHeight 662
+/Descent -125
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/I/N/a/c/comma/f/h/i/n/o/one/period/quoteright/r/s/slash/space/t/underscore/z/zero)
+/FontFile3 772 0 R
+>>
+endobj
+771 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+772 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1915
+>>
+stream
+xeT{PSW&Ύven
+6D !!HB넄7IQXV>𱝵j]
+nk{.sٙ?g9H"4 I2,MY lHQ
+L4ɬaV҅C W ݼpCa=+ !ח%*#ɲ8uQyR9rhu+9Z_d\TJVs\.*jߑq*D*/Hd99 ,]K(Uʢ"N&ndKL ܲ5IYpT#y\$HRR-APv>)7OM1%H&R4 +=bqD{HKīRBH2N0"WUtHtHzK浄JCo
+S"/
+5d^mvZY4
+Nlj;Mv7}ޮ1_)+ʢKe(Ko^cF/muuV[}} #KZJK]S2RO?L?}KTQ|uR-kƸm(yv.}h;wg4ci\iGQC\Qn p\bN
+ݸM&Yi۬v"O>lyn^ju:({Ym$Kcv]Rr Nַ#1x
+endstream
+endobj
+766 0 obj <<
+/D [764 0 R /XYZ 125.795 735.4 null]
+>> endobj
+174 0 obj <<
+/D [764 0 R /XYZ 72 459.874 null]
+>> endobj
+763 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F20 331 0 R /F21 333 0 R >>
+/XObject << /Im29 762 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+776 0 obj <<
+/Length 2797
+/Filter /FlateDecode
+>>
+stream
+xڽَ}bhVpys$F[7%E^ vz9=3 XM6ռHXVWWWu߼(y9n^'w?p.m]l~wop2޾{W@~߯^ɔwd>$0]^$]{Y3Y}tM{l+4G޵is=0Fu9ՕgW ;[ԪҭL4uaLiݑjU)q?2̶gf^$ jxy M3|n}ft:
+Giف eAXųE:/wp$L?V/xhj `MzY:NdUkM}XRX.2/@w_>Mm\(6|CoXb}JwVY{___^rp7x`\Vh1i׈"/sLD* p7j}Sl߃nmڎq,CBu} .yÖla2
+lV)?u#|S ^3J8:+P
+<}q5丐#G(S &DyRXmw&Db;OoNx$pH +Щv,JL-TB_3(Jb ¹bʥQ pA-|8x
+ºꃛ_YHF>MY DxrzR]59ʓ
+vnj ѣ!)#jcIg*0ρ sj5i212t#X ZɹI4B/߇.ǔuLh 6#O8A1J~t-rGC}1r_8O#s'Rayqxw+&}O7n;Tϙc=ss f($"-lEvx )`BL! pEk8HnǸk
+Y=]Y9OC()'7c1d32ׅ33uEQ7r/O@yd_bcHRa6x7J#gZ=ƫ l!A%Zeaxyů>j
+(w9zKd-%a(L\6k Q!#߅88 ))*I U87L302+vLħӲJAIcnOX⊔2n{;Ȧ'
+4
+a(b9t@ua1{UܕԌR>#sGBg N'ad,QCV{C ~m.ӻhxn2^=]i\A]%h,8U`w(qC,葰'M"~ jEb+4V AvGoV2xQ4gZ[a+rbJg\O EyR΃ǍS-! a rAɇ1w̋ :;ࠤb0t=2v_FT(?]nۊ ȧm0GwPbą@I $
+endstream
+endobj
+775 0 obj <<
+/Type /Page
+/Contents 776 0 R
+/Resources 774 0 R
+/MediaBox [0 0 612 792]
+/Parent 725 0 R
+/Annots [ 773 0 R ]
+>> endobj
+773 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [434.398 349.994 441.845 361.683]
+/A << /S /GoTo /D (chapter.4) >>
+>> endobj
+777 0 obj <<
+/D [775 0 R /XYZ 71 735.4 null]
+>> endobj
+178 0 obj <<
+/D [775 0 R /XYZ 72 582.661 null]
+>> endobj
+774 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F21 333 0 R /F34 445 0 R /F20 331 0 R /F23 334 0 R >>
+/XObject << /Im28 739 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+782 0 obj <<
+/Length 1696
+/Filter /FlateDecode
+>>
+stream
+xWo6BT*Eò:&6:[),z݃%֡#$=x; ׳H8" :w~lj:~囹Es/M7p~ru7cK`}^jNj+ eI4`QL(sq~$!r{݋?M2>/a^Hm}dU[P$MgU*eㅁd1TK@<bgNG~"B>f8'mU3iӫ)s[tW1Anpץj"qo"MwKbqD;ֺ5]pǔb6YP˲s<k
+Ń#
+<rA6+6/g(]]0Ǽ<{q()832\)6Đkn|vD!lԱöZnZU< U`lj3anؒpa
+ ۊ 5!^Ȱr#:#
+;8C;׿FE8 FmxÎ"\,YCE\ܭJlpTeQ|tDn۔y
+%vgL"`:A5xl#5q@i<p8= @ӑGٜi
+9\OgP#0_@8t7++Jb}!D|npD@'8,H|E@A_7h>1`HW'Sɨ F`[w
+
+endstream
+endobj
+781 0 obj <<
+/Type /Page
+/Contents 782 0 R
+/Resources 780 0 R
+/MediaBox [0 0 612 792]
+/Parent 725 0 R
+>> endobj
+778 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./entryguard.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 784 0 R
+/BBox [0 0 431 103]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 785 0 R
+>>/Font << /R8 786 0 R>>
+>>
+/Length 1499
+/Filter /FlateDecode
+>>
+stream
+xW7 +
+q Rm oiTWWQ#Iͷ=G;~OeKAkoBs
+ICdK urTi͸JK6tw[ BO?[hi3b _1m{-p]YWMr %D$s|<Kc.R|݆^^ ]:&5ˊ#%+Gx<=0NjÅ I jSt2dv<s73¬ZLݜX?=pplB'F Ze!6rZ jKΒ0bwf1AL!Sy@ގ3δ /2;D5ԶTD:LI-|eaGRS8I\2N<s</}@k}qm0E{8EEVS
+57$N }k櫵ٷڑBN Z7)萅b5~ clRCٱ $*%iIʺX5wGuZzϋefPVgǚ#f,/1]65R3-3UD⑌(?R:  7 )a$MuZ_`аNZEҬ$(@u9 BTZD}^/;+cܝrHt %T:'ڸȠK`=bi va)Z5uwrFaPwp(5G%O蠰P+vz NDSHE*{*wcٍ"` ْobGߘD5f0"eHF@r<nPP2b#ő] FlUvM ي]7 AGtp ݄Ǫ4nCNK
+\)\Yͼ%Wv6F:¬Z)p\$8_)`ZU8\ZVK+JVi"sw 2<S|;!XqWGG# E[,
+x 'S Jvԑb?P%Tv#).3"mH.A@LRq+hZ@DZ ~!晪qOHИQdG*
+Bo\CCĒ%v#S%
+^[MVq}KQ=BO(iq >?O!@k}wCPIЩD+]؝f7v㄁@5ő>Gͥ}֚FZ4z(Cő+3#lVJGktW:#|_n#k#yHCgePBEteUN
+endstream
+endobj
+784 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195622-05'00')
+/ModDate (D:20130211195622-05'00')
+/Title (entryguard.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+785 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+786 0 obj
+<<
+/BaseFont /NVLPEK+Times-Roman
+/FontDescriptor 787 0 R
+/Type /Font
+/FirstChar 39
+/LastChar 78
+/Widths [ 333 0 0 0 0 0 0 0 0 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 611 556 0 0 333 0 0 0 0 722]
+/Encoding 788 0 R
+/Subtype /Type1
+>>
+endobj
+787 0 obj
+<<
+/Type /FontDescriptor
+/FontName /NVLPEK+Times-Roman
+/FontBBox [ 0 -14 707 676]
+/Flags 65540
+/Ascent 676
+/CapHeight 662
+/Descent -14
+/ItalicAngle 0
+/StemV 106
+/MissingWidth 500
+/CharSet (/D/E/F/I/N/one/quoteright/three/two/zero)
+/FontFile3 789 0 R
+>>
+endobj
+788 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+789 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1215
+>>
+stream
+xmR{LSWK{l5r 5
+ZM~oo^ѨH|N( /WWCYVx퓤]a Hh!9C2)~A}$Ky{\E};V8jkU
+s_/SC6JUR;V2}v@6G?P]C C]&*9Y~o Pg諙?d[X2Ye{@7]iidZQty܁s;'&L955L
+endstream
+endobj
+779 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./finguard.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 790 0 R
+/BBox [0 0 457 128]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 791 0 R
+>>/Font << /R8 792 0 R>>
+>>
+/Length 6306
+/Filter /FlateDecode
+>>
+stream
+xݛ-IR@"3".Ab"2jphD又\+?~ߏϟ+}FO4><H(.y|}ƸlvU7y?goy՟1_G|o5ZWe\+6sZ}}ruMҊWokr<ovgԙZд= gg_#vWk}vwZ_MˮU^ >/嫏{ gmg3dz{_nH+.
+R7Xj\)<z7R$Hio7.kDu%mE+/tv{=rsk*jis9ӥU FTpK7VQ2BH'ފAmd|:V$)*oe?
+A@*٦ۜ״i4wHr3p/܈)tu/WmvƾYܓƽKю'O% q;>9X_yi9j_+V[8٩-)#w4BH.[53X
++ٴxmO[ '%blj !5gZ
+DO),S>fqiw譈U/t[!~ ܣxlV-oIĩA\5݋І!oI| >ξDaRJLwHO}bɥ$ s#XV rېKk%RAsY ,9T~W3rǝ ygX]{nV=Ʌ-O8\z=# Q}=f`a<̆kb,O)tz&+jkX{9 ]ن#6 :GuMtG?Tdc -Y>%kQPLR3䵚k
+4whxhhf
+>)nmX4'F &eDxw@h`E̳.\Ͱ{?1|\"h_ui"-hm>!tCIEEQJi,oDUdڞ;9т&snIKf AdYv@$&; w 5tlQ)`VP雤% ʴxpȐ'$8]<MҁAQ
+){pe|HLr3/c3@*ńU~0Ȥ;!$W@ƶ-ÒOVbQ~.SX<7[N53^S$p3 %bD!^u׊zUm=?]&&`#)b瓃*,-C~bGI(be9@|^sX$$h\F҄DPl?8zoW:bوgR-W}["7Jr"p#/2Ma:Kz٫_ Oll!Sn6{"w݆^dtiG훊n9Z!Ќ Dܞ8O!oՑ=EL[ nD<g2nzwsR4uh;{Up
+ %)QSH #G=H1"B*K:- is7btp8 baN5.& 8!IvC(NN{
+fTX=`0#rU-߈9#0dK 71|CC>v@ksz' =/
+F'A6[~s .5s3GT֝Ӿ{WD^G) 9E_!Q\Gc iԄ;91I7I*RB^uzgFʟETbH&D/Hof䇒= v/T[^x_XF ZdY⺑p.1(rI](c8 W ftkԠ[!C*NgWB0ÝxѱNEX+g (.}3] dt0IC`,x!ssZsSdEYQspPLcxۘJv8b%i#O߱rӁkbW΍X/UFMOg
+-1/]T\yTwrGK񷹊p
+3XH'sOKJ $`0
+9wj|%텔kNn%铓 qc~9fXdtSШ{%V b+4nPQCn'cezrZ!P-ܹA6<>=,S=yEbr<qNލlv SPq tJ cwA oO x^9BPC{9*ijva~e*1
+̆y|<58CK=GJB֩DcQl5HKzev[Ú4n>Zu2jw
+9ųmCҕ1Sn=u8 5"56 qԵI?Ե$)u q`1p{?됬jE~ʖ=<ƺN;M/dF\j,v{
+7"rv)4h6DrZ'RB类u+"+FTmL!&ZG
+5eC%sn,RQ[i;w1ZhN)wSTE7ǣYTh*ѕFiWgh"<Up7^NH)Sjn:zKN3%?t"GL0DyhlcR:BDPe ZAa S
+}QCr3'arSᑲY)Ӹ9o9S,/\)ᄠEsH fϯ95\+I:Lm1xͰ=D}档?ik6Gդ*'cxHHdqqAꭊ4F-JMk
+|muPF^]~Be|X)W<H$c7"Q)ǹJH;&4瘘B7(HM vB[H 7ENFmr iw<HA/*=56
+ݽ\pt 94q )Hzi( 9t#C90 e͘*xgHPD=ڨvFoICiSoUeH+o&SFFAt1{M usLOIC7ۡzQzHfF"^wO@dv(J6K=C_["g$=w ""G`ŽBB.Dh
+
+2Fv%s曑y[Íbjz#c-HR dΗa/QV| s;t}d&Exjd>݆ytF2y"iH?0s pG:x?;CT8d8LNLfzݤ$BN7ɤd$qMJ/l]6.BJ7dE ٹOf
+myK2P;r-f;5"? ^inG A 6bL]HZNb̯xfIp%K9#jqFegTfph&?Qm("?.Trh(1kVw ^N,sW`NLerW`ˁF?zLٟptT2ڝhD%4 /c?w -N)*s9uLnip8VI+6wv[Xϵ :K9e.~`F'5l]+5[~d[R] ؅`z˻P *BbsJ %fF6R<힅+v'Gx5=%GowuzLY\ɻGaEBGU]YoBp!1t anC2 [C[ ;Ώ]ryrQShc?`ؿ?}+|篿’6ǯMu@,ADJ|Ն!)p_P ӖzU%s|$?9L`.);HQOЖ_CZDm֙ޣ' DŮ*X-?﷠xYl/e~?* qDrj/~WDG
+endstream
+endobj
+790 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195624-05'00')
+/ModDate (D:20130211195624-05'00')
+/Title (finguard.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+791 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+792 0 obj
+<<
+/BaseFont /NVLPEK+Times-Roman
+/FontDescriptor 793 0 R
+/Type /Font
+/FirstChar 39
+/LastChar 78
+/Widths [ 333 0 0 0 0 0 0 0 0 500 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 611 556 0 0 333 0 0 0 0 722]
+/Encoding 794 0 R
+/Subtype /Type1
+>>
+endobj
+793 0 obj
+<<
+/Type /FontDescriptor
+/FontName /NVLPEK+Times-Roman
+/FontBBox [ 0 -14 707 676]
+/Flags 65540
+/Ascent 676
+/CapHeight 662
+/Descent -14
+/ItalicAngle 0
+/StemV 106
+/MissingWidth 500
+/CharSet (/D/E/F/I/N/one/quoteright/three/two/zero)
+/FontFile3 795 0 R
+>>
+endobj
+794 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+795 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1215
+>>
+stream
+xmR{LSWK{l5r 5
+ZM~oo^ѨH|N( /WWCYVx퓤]a Hh!9C2)~A}$Ky{\E};V8jkU
+s_/SC6JUR;V2}v@6G?P]C C]&*9Y~o Pg諙?d[X2Ye{@7]iidZQty܁s;'&L955L
+endstream
+endobj
+783 0 obj <<
+/D [781 0 R /XYZ 125.795 735.4 null]
+>> endobj
+182 0 obj <<
+/D [781 0 R /XYZ 72 702.645 null]
+>> endobj
+186 0 obj <<
+/D [781 0 R /XYZ 72 405.846 null]
+>> endobj
+780 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F20 331 0 R /F34 445 0 R >>
+/XObject << /Im30 778 0 R /Im31 779 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+800 0 obj <<
+/Length 1420
+/Filter /FlateDecode
+>>
+stream
+xڕVmo8 _a6ӫ]غu׻܇m8 u̖n(%NT4IQD>d-{=z1Ga7[xE$̲ܛͽz;4p?}s5{;N(7W/_'gq>EdDFu,8<OP;pAE^Ҧ,Ltq|=k|>d4L %Ʌ4yAy5~nA~yF=e:i բsWq
+=Y*?OS_-[~_%\"'3iAd6*%n8 ,Bn*+]2Ag_1× gb5Ġy ;k#
+cW eXNK4ĈVLHg!#~u R
+0eî̓j
+ȗ^v\pmvX__ 5r/](\H "!mV%tpt5N nl87;H7Eqt}E]ۙwȢĔ
+nHcbtkÁ.A9(0\S(V`^+FX$ܙαޞizAP>UH"r㺦cШ=7I*8..i Ah V\[P#;I
+Q◩5' mL kQ;>rHNpZdȷ|͙_p㺷Du}˝&KVbmUn2`@M(2Fmx{ b)
+ǐ! ]0WI< -S}cmH04v̡ucwP3u=B)46*VFn!NA){RHyw;bIn&̍ 4xiv6mq9oPx\{~z瑝(w)t| )x
+>?Fp[&;@9+Iazmŝv1{¿! zg
+endstream
+endobj
+799 0 obj <<
+/Type /Page
+/Contents 800 0 R
+/Resources 798 0 R
+/MediaBox [0 0 612 792]
+/Parent 802 0 R
+>> endobj
+796 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./leftguard.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 803 0 R
+/BBox [0 0 519 140]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 804 0 R
+>>/Font << /R8 805 0 R>>
+>>
+/Length 6652
+/Filter /FlateDecode
+>>
+stream
+xݛK%GrW*Ufuk0GDi<g40_Ȭ1rТukd\޸ԟ'?yϣfȹܔ\^-TRһ̣ߟ_6;G(yZ5L^sv]Pk߿g.;WJ5)=.)R̳<Fϯ=ys^ ƛRoiWkkaܳ¾cłv^Mi|nuŪƧ|QZքǽL Ą{!6eq-nyhV:1nt$1b~cU̲yl-Hgf,hgJ@
+z#c֌uk:Wط=cڻtn%Ɍߏ{-ʘ>~Ng^}V5bnq2!uюrkU[J˧Q%Xt~2?zK{ʗr`S?hlR2yKq=/*uj=5;~=k֙UkM؇>Tm
+RR;ڼ=䔭ֱC|<4ΣKz:X&[>3(9=v.q/Y|fӨ5"eJfLG zc2/udΆmR޷̋u]\t*qtպ{o)+jRJ+㐅sc${LM}K !}Aa2)Ss, y?/hKvC-Z(BiNku2|%ne-]
+JL6td(6&뾲%1=`H,(3m.7Ϡm^Req,)Gc=F8EѶ+E,8QQ9Z_J*jPj=i ۏŕܟ3<MqK S6NXdZuKN;~A{I(#Jg kEF/m:A)2$p3(,YNy<d9#V%(MB abudTu4$v$({r"R-4?q$\ 71AQ0E< i[4Jl%P6*'E]_Ots.MX]"#[coP%},=8W.8C@{A2_ bV$3tV$#(:F׊d8O
+1/# `l:EY#
+΍Yȏ̃YiEY]bCbRh.73&Z>PB
+}>2sQ=yr=L}?hf Eo 39#tBCJ{Xby_n3Uyu77*VWD.3e}5|()K @cm7pTiSaΤPSrEz=v1O<YcF6XVWc
+s
+Òm}7
+BX,R+aܷǭR`6uEZFVn%tPݏy`>5/AM!;ˊS؀ "`Mr[*Ř驣XA=o#a.ahl\bLz@xe|A T>\PL J_ -Ԇ$1n
+WR46kW@{D>=ytqst~YsWhVruN[Pt0$5+.,.^c;+P[GaG *S ew
+"s'_>Ka.F|M5'@,
+gxHP\ o"Q g;Q(2Zn!锕 OgJuyP8%;9s;ڇ!G
+ZF "YIj^&QҺn^AǢr$z ;s{W˄hr¿8^\eΈiIŋ9NW~,RHF̂nsO®|JϧhVyVH+`÷"mD)3IA**nkG
+i %$ 獌A_qzJq#ESd1Ljm@+XGEJxvytڬ/L^ ;{rˡH8=zLkrP}:y8h! v I#5NOn%')to C}<]iq-`[Y2=c
+jx)-$O#8!+&=q jG(IꗜST&41'N; z7S"% %Pe$|8 HYR|jhogVC{S|H9%y;KK
+2LsJuAi:;([VUvl^V( !vsnQbfnm0%#14sv6dN3.)Rqۂ_][Ghq_%J pᔃ?ß !zq
+䅹
+&DF
+%h;
+%"D+PA1DA"6<4 PP?SQG ˨6{!lUzBb
+a?<l+yfؕ:\=I8mZB}ozPv/?NsFr$yC
+S])v `׽j@X1Q)Q N1V<2|#\~E^'KhY5D".5;U"*6z]}YqG5]r.+ {yd]IFO
+~8J_qƼY+L5,ÐUKQuo_E|I5?KFkDaT2l&/;7oc BtP'N!5>,$D/XRVְe w"AV]7Pn}e+fo{IP AenG{\݁{4
+^R.ΗdB|"6yLbT(t-Fd]i!rtd)~*Ѽ5~BM0|h "-j{L!k4Cy"R<%]ϕV+^#oUZM%p7=-m^
+
+c{!Q^AgM\Qn( o(*t"PS!~
+RJ&dOh:k5Pb)E qgM{vRx S yR?Yzi
+KP7E]?L2<^yn.G$Σhy,ij_eUdbQQdT
+ t&G8-J4AJ[#æu<AɤG}1k8S˸/$JĂVW@!<@RB( eQ/3{K:؀yr sQ'K\;X Jw͔wDhHΫ\<|j)'s4(x@ӟ]WcnrV5^Q\` 3vCY7x8[٨
+r^zkn$`*]O{+W,B-@a;u,ROi;W\4MFHj=p)
+
+h<?uP|lomt6BU=e8<Z=woT⢧g7ݑnt8VyaVIEeBQ1~o*i:ZˀjFӠP>BAF[Gߓncy$< 􆳥5?>=4kAK9TͨRZrzy=2'ĿtsuN10H4`*'Hs,9W"YAȜgAi* D9o Yƅ*{62DZqFT{0ڊBT=&܈I@V;c,Ds\J_jV<==)Z"V.9+c+%vaF, q'>AL{S*+.$yZzt؜NBnVsr
+B#v-*h. wm0~
+a^fQGIÜa¬{;TUN(^МD2  ;'ۑgĵ(zaD~t^G[Cz@d)=~v[
+&*rq_?a%$볐@myPDЃЩZ?Ì*'q83.ElB7{/*`B{0~}y@L#EW *7@ײkx
+CW8(_EO`¶Ӳd<xSR<v!r %'x}l#PK-ԳJN"J>9ѐ-@nhG{`>Ҟ bYC\(J^y ,pv]y?ߏ7t}߫%c^R~wݧ?o|+ 1&)ӿ~/ʟr&-oǰ2%0KO{_~_B7
+=&cOI J}Ow?_?1Eig{'ZYs!*Hv>_KuaDͯWO8
+endstream
+endobj
+803 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195624-05'00')
+/ModDate (D:20130211195624-05'00')
+/Title (leftguard.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+804 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+805 0 obj
+<<
+/BaseFont /KXKRSM+Times-Roman
+/FontDescriptor 806 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 250 0 250 278 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 0 0 333 0 500 278 0 0 278 0 500 0 500 0 333 389 278 0 0 722 0 0 444]
+/Encoding 807 0 R
+/Subtype /Type1
+>>
+endobj
+806 0 obj
+<<
+/Type /FontDescriptor
+/FontName /KXKRSM+Times-Roman
+/FontBBox [ -9 -217 707 683]
+/Flags 6
+/Ascent 683
+/CapHeight 662
+/Descent -217
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/I/N/a/comma/f/h/i/l/n/one/p/period/quoteright/r/s/slash/space/t/two/w/z/zero)
+/FontFile3 808 0 R
+>>
+endobj
+807 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+808 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2137
+>>
+stream
+xeT{PSgא|_-BDk
+eDS Quan¹|WZPoGY8rSrFlGOk)E28_!y:Te1tcw|qN 0{{[#|z=BT~\Ӆzc'zOKO.Sal¹Aq.Ðk0 LFdfil,F5چZȽ}?#feP9Oxpqm j#1x
+L[zh&?IaҀ!˄Hc.E%B}!ᣎf;b 8U*<{].vcxҀ@Б#G &Ԉw737i7fnB|;jt}D뙆F?CBDdu*3CsTyjmEt.[4eYmޚ t;luuva΁gcbOa kUYcZ):
+q/p=鍭ӑCL'G!,FeeVnT"':+a2 Q?‘raBkRc;l٭=66B
+x}F֙!W0ˣTlzsyx@Ҫ63]l
+i~@5dZz:UGi9 k_C f=_9Vm ͪ3"xċ
+Je]%}'Nwۼ]?;w8L3adyvƘ9yI) D+RN/^Gٖׯ`pQ5:\PS̛:Gi -֯y0p|,} +fbs! gtJQa5u}>ZBB/>_?bQrkI!>]?}/S|vKwwL5 tZ B~ϟ~<Bs%
+endstream
+endobj
+797 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./lmkleene.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 809 0 R
+/BBox [0 0 420 168]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 810 0 R
+>>/Font << /R8 811 0 R>>
+>>
+/Length 8333
+/Filter /FlateDecode
+>>
+stream
+xݜˮ5Gn)r&he .2\! 4O<XCW tFd\"c>J?o_>}r?GR})#ϫ)j3W/񗯺>5qe-3勇s}ViO͐c~?_og/o3+^>9r$-ʩ5mrٓ/^;ϲ/_s(cH<?>1˧zJW OřnZ%uO[Ks4?}gru5>4kr![VQ|<39őQ~?]ijCΟ64#YSZUUj6Z5N)YUg)X~[y>@$k7esϧgw?Ҥ6+,MKzvͲ>)gV̬88=BwP\ڑgr|gܧgW:сI:J/HSggَg&U!7"$=N`hN9䃸߈A~7 [KIZۑ,ۛSj3s~5kqﹹ&ap\<39őQ~?]6jWWcLoCS:J"Ygk25r3z/kYfmҶ=}54rurQ8Y_WzP;;HմKNDS;ulkhsԦ~{"|}zIfR*k5jzȘOamw/,AOF$N˶gr4-?Zr:`)C-k}8a#_oer.cJlFEw|~ow4<;doD).]"/G5ݙ]bjKt2`$ ?$E
+HQoZrlgE 5vf%{+1+vF510CžҲD#xPn L"Mv70Sll~r+Z*^I%ѿ0$"%~Lp@#NvgreMS1[ÍzUJRYAung$PR]i5&z $ڐ]A$!*jiS7am{bbeAg`ҰQzõ><m&M]ӟj=ז&'nwȒEȺ/mưC?MkyHԞ!ޒc oW /fΦvRƗJ|`%šK? IIüb~_!Qh
+b
+T?-47w D&,5'Gi6@wR6)Dy
+>-!rkT-RR%c|Њep\ DLݙ>H8mvafw!ƙdcHU#Z$]3q?`XKV쏯/h+`e{j4{zb[^nZ!^rvbnYg%Kb!=ע#7"|;~
+`t0)(j4lt婓1Kl}ZƑ`|{mTP2 `My..dpeH8H֌0fF[닄9";nEG|䎿 @8ĥ@fA7fzs0Q_>ͧ hˊcb`TVg%0I;׋0d;f/ejB&j1d[$G\5C1嬖0@c!S2
+ VIu yGa69μ-y{Y`Q$%X:|<Ӷ6ƌ1-|&9exrś$N7"I:2W0UWsmajG2>^.e>2Mg \>S:QI%iBȎ# ?;ީ]Ay(7[I<|-A kLr0Iw7DM"H>@G3f&%NLP3I V
+.^Y 3xQ:
+Bdfdd$icY4t=Dhz+&y' $`3:>n@ |\+ඐ6ѪLxМ6$@&ޓ
+V`嘓$լdQ+T)tɡ *ꕽQ B<h1G IN#5sQ}l-Oa'o\v zM⨸eHp],kbR]z\yiٲ l4"bj0vӐh1">@NF\ {4oTLR@|&.MKWíҸMK';QD>.[A$l|&qĻݴOʡ%D` 2$j>,8F(%0[A4K=MsH1d"o'
+Iލ(FiMe]TFاe&)~ x>03Q
+P҇>QI@D,= r+1fq *m&j1y1qog#W3NBG+yIf2@p\e aS9h%ĞaB#"@+"jK =kf^.ֿmL@WSXuARƾo
+T]s\4Tܮu&x~g7<FFq^Yr!X]E%A(9{9J>ɐs₾l$D’1(P='J<̠KjnċYB.%lB&ڀ?rإc#̄e`d ',[#Y|xe6vG23{/:^7KѤ1IѤdwɆwIǔq-f_j^gO%+r%Yd [>:ATL$sԢ&ix
+Z!C9uލSfwӭynVmf3_I*?pXLTMyKOwL5=gXqվ=^C&?垧tUTZ.XUKJ~:ur1~޼,_֨|
+mSEm%ܘi4t% -L"QɊ8JZ.sEN
+%[{$H-Ru \Dj!97/IFק#la _ǜ0fN1 VKM&GumgRvUSZ籾$۸%73%/<?:#$ݍIYKb 0`0<YڞM㱎k/.ΒH^6\kLYér(`2PY { ^%]Bّ˅;b-[7=z:tP'QyhBj`諔`y۵
+̭S
+ q=9
+[ZH{BԊk#XŚrFѮE<9DMØa6'ق6HwUl7PZOꉢ"Q$jt%g*҉014ʦ)lQVszdj&)]&R~~c1G"7/¿\hJ>T@=F".bN T%Vh*B%a4+~ ,&ȆE,)HT^xRvJ .fOVj1UL%@W
+Ig0W]9,!n* (2r$20SY!bWpra׾+#!kILeTaK+]>D2Dᶍ`v
+U /乴oX'yedl|.
+ ;22QURx2[ŢsEiFGL̫TFj2BU\І,u2J`Fv0 CIۘ
+edyb~F |W@h;
+A[XЇғ%Ñ8yRPځ3j
+Fw$Q@U (?G2=aZJNe=lQ"
+o~Ms{QȭZ4Y+Xy3{,՟]ξv{#G9@ԈbtHŌJtxlzj|$a$ǧ()>g-s=Cx̝_g6SN_:SL54띬{,ȩzSSoc xL^ù ɆIvZK1'݀C*P[}&E%jP1q\#v
+82iv.pը'NKT&*N2,/>N`~!=S_J%<6sl5hıQeȭPPAcFDY_sj'ݯp£͓윲vl
+ .^H
+l ^ŵT_* crRf[|@da .x 7 ~-"$> AN){0w [389؊xS*(JS[?#JҨ^.vMI⑻ܻOwְQq3aWU)u-xRrnUоzSF0֪ޟRʕŹ_89d"#wYO>]w {Ƌܾ<BeWby*qEryEId_Ju4¥
+ Iz#ZY J$nWn}
+m@U=Ǚ*
+C+l}r{9%_5i1lg;~
+endstream
+endobj
+809 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195623-05'00')
+/ModDate (D:20130211195623-05'00')
+/Title (lmkleene.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+810 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+811 0 obj
+<<
+/BaseFont /PNVJMG+Times-Roman
+/FontDescriptor 812 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 122
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 250 0 250 278 500 500 500 0 0 0 0 0 0 500 0 0 0 0 0 0 0 722 667 0 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444]
+/Encoding 813 0 R
+/Subtype /Type1
+>>
+endobj
+812 0 obj
+<<
+/Type /FontDescriptor
+/FontName /PNVJMG+Times-Roman
+/FontBBox [ -9 -122 707 676]
+/Flags 131078
+/Ascent 676
+/CapHeight 674
+/Descent -122
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/A/B/I/N/a/comma/nine/one/period/quoteright/slash/space/two/z/zero)
+/FontFile3 814 0 R
+>>
+endobj
+813 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+814 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 1444
+>>
+stream
+xe{LSW嶽ʼn 1 "/ʼn
+Q
+-X H[-oW6?iΙ,ƹ%8csÒ,&?'~=x.n<"(N\8…]Ih#_t
+ڼ`2x#p\./(/fe3k֯|1229RDKҬ|f 7)y⏙iLd LZF$É%$LZP /en`BCB6qCX4H9+db8IV,
+aˢ>ݕ pCpPVcO,([yb^7&p̓aƟ>Fb;ț]`=m* H4ӇgGM7(cK"儯0)efcA|I`[Q/j_PIl\vpRhf04{CkXz$}9uФ$uT(jq 4zJOɇue\IP@AVJ(6 /tE"3%X7Z3?P^[~fFƃUfB$SB$=`v8$_sh\5Fpb9:ʌ*Ʌ==Ggf_?kN*uU]%bDuC%{
+r(ar=un^ I-]6sq~P#괥U
+\[
+l)ltYa庣k+4*_JM `77Wd=Z3
+endstream
+endobj
+801 0 obj <<
+/D [799 0 R /XYZ 71 735.4 null]
+>> endobj
+190 0 obj <<
+/D [799 0 R /XYZ 72 702.645 null]
+>> endobj
+194 0 obj <<
+/D [799 0 R /XYZ 72 431.722 null]
+>> endobj
+798 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F20 331 0 R /F34 445 0 R >>
+/XObject << /Im32 796 0 R /Im33 797 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+818 0 obj <<
+/Length 643
+/Filter /FlateDecode
+>>
+stream
+xmTM0+rL&`Cȱݲ[*n=8X 6 +k{)o>8i y=<,ҤH,ރ|lq$-|W5bP(Y.h< |Jܘu~><eal<+ak4J}1Ac&
+)^ Rx [sRQlj-41&Bb
+y5S
+endstream
+endobj
+817 0 obj <<
+/Type /Page
+/Contents 818 0 R
+/Resources 816 0 R
+/MediaBox [0 0 612 792]
+/Parent 802 0 R
+/Annots [ 815 0 R ]
+>> endobj
+815 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [232.701 609.395 248.633 618.963]
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+819 0 obj <<
+/D [817 0 R /XYZ 125.795 735.4 null]
+>> endobj
+816 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+823 0 obj <<
+/Length 2529
+/Filter /FlateDecode
+>>
+stream
+xڍY˖ + 7#;M8l&Y)R힯
+Ǿ;`
+5y9e0q[HH ) j$#,ՙ
+>R;!b$ydNk=P*& <6q=~p<+o1IڦyQ57=LHə!%imeq0cčh[jƈ Yхђb 7/2C;w ⅒޸3L{{0F3N^oA|3q~R<#(I2Pm=>|yVjAX<)^b WjN5*HfT \4k9_Ac}ksa+Y)R?EWF|I`vthZ%ý
+Oc_ue|s(80r%i:_ u3015.N?Q></Ƨu nwi&Y@|5ހ6uU3Ue/bk ď,ҪML<%c?hG_R8PDh. I^
+uYPG&1u%^AXhDVw"v?+0-D[(j>kcf-R$%5^ [ C?Ig[|M2_eYgExi=[i\8*0s47vdydT:jLΈSIiS^LB$sEd
+)ץ'IP Bft`ScvL &1XIlK,
++qY ; jP:}ǂdW B9FCsMFFԨ()4,R6q@-Ԝ'Z *Z0׿srT(W7vUv}3Dui<%+bN
+endstream
+endobj
+822 0 obj <<
+/Type /Page
+/Contents 823 0 R
+/Resources 821 0 R
+/MediaBox [0 0 612 792]
+/Parent 802 0 R
+/Annots [ 820 0 R ]
+>> endobj
+820 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [121.709 253.201 137.64 264.891]
+/A << /S /GoTo /D (figure.5.1) >>
+>> endobj
+824 0 obj <<
+/D [822 0 R /XYZ 71 735.4 null]
+>> endobj
+198 0 obj <<
+/D [822 0 R /XYZ 72 702.645 null]
+>> endobj
+202 0 obj <<
+/D [822 0 R /XYZ 72 212.781 null]
+>> endobj
+821 0 obj <<
+/Font << /F20 331 0 R /F15 325 0 R /F34 445 0 R /F21 333 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+831 0 obj <<
+/Length 2132
+/Filter /FlateDecode
+>>
+stream
+xڵXmo6_haTF(zij)poIpwBdi+Qvܢ3RK8C
+?Ae$^WF.} Nm& k[ֻ)oBggirXuޗmvۖʰl
+U?'ﳳ9ehuQoCl n}o|Cc<,fTn4~s9Eciέ {7{w220n%q{5mޜ&wMM2y82A=uB ן"NA
+Ev[0#FqaEXYk-
+іr׷-҇J\Ɋ–P\*TW4)j cwVU]X"U? C!K'6zmt<E<`Il9| ޯWh{7-Ciٓ_i
+̚]
+4h ! pqp
+fh!ҝω h&: QDO@^֝fhR8L{aȔ L%i
+ylÇ4&,lz3u啭\m@KC"k;4
+x2In4
+!V C
+)
+e6<%ͽ;HC'jWҦ>\y-{dFArL3CA:! _9(رŢ(cma՛1xAe64-8&=jP7+)`8.LN7 S+o($sjA'a9NZVŐ:ٔx9Ei-2̗BV $a2"fΗ,c(
+endstream
+endobj
+830 0 obj <<
+/Type /Page
+/Contents 831 0 R
+/Resources 829 0 R
+/MediaBox [0 0 612 792]
+/Parent 802 0 R
+/Annots [ 826 0 R 827 0 R 828 0 R ]
+>> endobj
+826 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [219.671 159.703 235.603 172.605]
+/A << /S /GoTo /D (section.5.6) >>
+>> endobj
+827 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [258.458 159.703 274.39 172.605]
+/A << /S /GoTo /D (section.5.7) >>
+>> endobj
+828 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [196.186 52.115 212.118 63.804]
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+832 0 obj <<
+/D [830 0 R /XYZ 125.795 735.4 null]
+>> endobj
+825 0 obj <<
+/D [830 0 R /XYZ 229.136 435.536 null]
+>> endobj
+829 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F21 333 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+835 0 obj <<
+/Length 1824
+/Filter /FlateDecode
+>>
+stream
+xڵX[sF~5 ˊv&3;L[5$j*89{APLbro8'p~^_! qVkSG(b*s>o/>.0 ]/<Η_ajAq/t^Fۛ+oo/~Y|^?"l(-ba_ё^>BD= `Z4<VV+"l(J&~UU^qjkR\݊ZV&Zky4pHQL),5| $﷋-y3c+Zޞw(HaF
+bP9dAR>jUVm+F;Q9.&lĝ&1'Љz"G,mE;a:yiN5(cU%t2uWmv<k%+#]k ѭvHhuVkoPK umlTZ
+CePuY1Ŝ?tZc˵V;cJuS[)T\taj]
+Eo:Q15V]|Z y4$~ĭ&qH|4V5#Pg/^@35"UڵV5Oj;3G `0$7МFjcƏޜ]տ ،KӐغGOB:ɱ#`=D0aUw|Wn;U~1_Nx3r:M
+=Vxa_˶嗅 ҮG&p5g~.k(py& 6 ͖
+hX;ಮƫs z0>p7i1Cu;)}hW$ėp*H 
+R斑(AZTC͔Jbw_<vS¿Ar7r
+5>U#TMS&mjW%YD!1n\fϱ㤵6ToLOSBӵ́- 1ʩyaju&oڃ!!Һj, T{Ż, 14$+ㄚR\ /:sICc^_3T 5O]*KKr y<Nh$Qf͈$\4sOt#?bb!>'OXfV$8Y )jRs|6Pl^1$SzObT`9O@ ϕHWX0m]a8~(zfYbtg`%t @L@%Kl;Y HE9Z l̯fբRHTtPjWQڭzCk
+endstream
+endobj
+834 0 obj <<
+/Type /Page
+/Contents 835 0 R
+/Resources 833 0 R
+/MediaBox [0 0 612 792]
+/Parent 802 0 R
+>> endobj
+836 0 obj <<
+/D [834 0 R /XYZ 71 735.4 null]
+>> endobj
+206 0 obj <<
+/D [834 0 R /XYZ 72 673.126 null]
+>> endobj
+210 0 obj <<
+/D [834 0 R /XYZ 72 350.719 null]
+>> endobj
+214 0 obj <<
+/D [834 0 R /XYZ 72 198.616 null]
+>> endobj
+833 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F21 333 0 R /F34 445 0 R /F20 331 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+841 0 obj <<
+/Length 1995
+/Filter /FlateDecode
+>>
+stream
+xڵXm6 _osgٖ_amZ\C[ \slVzwGcnMHTZg~X?:B~b.ЏcXoo^?\(\iXK!w 3ǧ4~{͚8/qճ/.G2ɢ lE,DGqʉOeN?I_.WBuǞJ0}*7F2>c*eH?$LkW߷9$?R#R&#; HY0Iz |X8znH4VEi2Oa4Ϋ~h QX:ލ-Fit~r
+p7 hġQ ?.Օ,TƭwEᝪS6ZՑJ:l ZŎeү[Qa$iI$=гi!XעaIԤϪN?i|Ӵ_azq=($JQ*Nb?Of/u2,_09%=C1D@aI{/85O'/ǴUR!j鿁ҵ)~*5"x F5 xX:!X Q.H#XBH ם^>˱ӭՆ-@xJgIrԒW]sSWQ4iY:
+>࿧oǬ$Y\^
+ Hɐ
+o{Rmn0%Zl9cCe?DUvM혨BJ.xxC8S2hQ'K097Vۊq{d(Px˷< {|EHqaP4`/Q'n6n/syh<ēD&MBA{dc[۪.YظI
+ͨT]D #Qu?(rɂ":~
+ᰙ3x^\m:,#\ӹŌF!\@$FÇ@q qB6PStgۀcz@\v)]c;ۢ$DSu_<[8@l<RԔUc G =qhO8E$gtjH?ɜvG$
+Kr_M
+ 5V.
+endstream
+endobj
+840 0 obj <<
+/Type /Page
+/Contents 841 0 R
+/Resources 839 0 R
+/MediaBox [0 0 612 792]
+/Parent 802 0 R
+/Annots [ 837 0 R 838 0 R ]
+>> endobj
+837 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [339.095 190.758 355.027 202.448]
+/A << /S /GoTo /D (figure.5.2) >>
+>> endobj
+838 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [278.852 103.284 300.239 116.185]
+/A << /S /GoTo /D (section.5.11) >>
+>> endobj
+842 0 obj <<
+/D [840 0 R /XYZ 125.795 735.4 null]
+>> endobj
+218 0 obj <<
+/D [840 0 R /XYZ 72 702.645 null]
+>> endobj
+222 0 obj <<
+/D [840 0 R /XYZ 72 598.163 null]
+>> endobj
+226 0 obj <<
+/D [840 0 R /XYZ 72 448.181 null]
+>> endobj
+230 0 obj <<
+/D [840 0 R /XYZ 72 311.748 null]
+>> endobj
+234 0 obj <<
+/D [840 0 R /XYZ 72 176.489 null]
+>> endobj
+839 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F20 331 0 R /F34 445 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+846 0 obj <<
+/Length 2093
+/Filter /FlateDecode
+>>
+stream
+xk(.5AǗ@QQ+iaTԝ=3;P Eivvv^;eگwO>.+EPvB 8NVj{/_7QydY@ݭu{/^~׸~ۗw"KG0 aQDOV/
+HlMyuSJ7IxJk
+JW0qzuPYp"Z%qP4,J^t=Iڵ$L
+(ϩ3uy#+EL6:r2&YDk'C֥3h:A IlZmVK!jHz*v|{(ttoQ!~6=U#!l nϬukr 0yHs$t{" يͿ4c:Tc@q9yIhƙFvd;,x.dzy6R6E4AJAqcJl d|cwvRV7Эsݜ+jy?fKX
+.+v!4D6=-0Fy8srvz<xwfτpaI3!fc:'& :>.lHoٱ`d< h;Q{eC fلtc^vStRkA]s'vwG?\7m
+KBca<0]$? E'U`Ez"8="NZЁ%O4|,HW
+Rbe~gwJ5Nf6% ?HWr" '_O:aAB` ƻȨug:mUqi{WG=I}|N3Cۀadrm^vy<u(󳐿
+S!hZI 4~yx/]i933$
+endstream
+endobj
+845 0 obj <<
+/Type /Page
+/Contents 846 0 R
+/Resources 844 0 R
+/MediaBox [0 0 612 792]
+/Parent 848 0 R
+>> endobj
+847 0 obj <<
+/D [845 0 R /XYZ 71 735.4 null]
+>> endobj
+843 0 obj <<
+/D [845 0 R /XYZ 151.652 471.401 null]
+>> endobj
+238 0 obj <<
+/D [845 0 R /XYZ 72 174.809 null]
+>> endobj
+844 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F21 333 0 R /F20 331 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+853 0 obj <<
+/Length 2523
+/Filter /FlateDecode
+>>
+stream
+xڥYmܶ__j,[ܢps Y6wȕt>ш!3p~'_iRQXDZVY qhLݮzpɲ<xo`Z+84?2 ~_oJLHFD8I$[m,)x{QP#);ss*n֛8 *;7*`I;XGRѶ(jDAt_Z~#;f'u֭fzk\ϲ f7J<vT9uw[^ gjVEXqF
+ 2Su\Uno< D㯿DIT5xw&ĸH~l^0珧O.\gos3ݛ7?]R /놇lfSgxz,WyL7R uaq, ^q#RjA4];b)fT:11neRkH<cuU\U%M OB!".%N&w[
+YR,
+ x+Ynpد_"e*6R ΠpT~ 2_R_n:ݟ,x[}*~x\^
+e֧#`$ب0OtuCE<)᥃,Fr\ND
+^sC$x"˃ %?K&CuvT.ŒUq)%Y
+-fxjˇ_}H?\E8MqHI_mr)y
+Wo#cWȐjяAz>畽'ﻵܩjsg3?؇\JCE4O~~աnT::\ؽg1/5]>|%`
+endstream
+endobj
+852 0 obj <<
+/Type /Page
+/Contents 853 0 R
+/Resources 851 0 R
+/MediaBox [0 0 612 792]
+/Parent 848 0 R
+/Annots [ 849 0 R ]
+>> endobj
+849 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [309.864 187.659 325.796 199.348]
+/A << /S /GoTo /D (figure.5.2) >>
+>> endobj
+854 0 obj <<
+/D [852 0 R /XYZ 125.795 735.4 null]
+>> endobj
+242 0 obj <<
+/D [852 0 R /XYZ 72 592.303 null]
+>> endobj
+246 0 obj <<
+/D [852 0 R /XYZ 72 438.519 null]
+>> endobj
+250 0 obj <<
+/D [852 0 R /XYZ 72 159.841 null]
+>> endobj
+851 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F20 331 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+859 0 obj <<
+/Length 2640
+/Filter /FlateDecode
+>>
+stream
+xڽY[o~_a/2vV&s`d n%&ɿQe 0uHx[||wB{nb[ (|srzqKeq.#-Sۋ_~~ǧEšLJE>.zxUyNjU8U<j
+։4bf~<M0iU$iTTΙplQePTZV+3:B]b*^W9ӳ~7N]r7  8ݮoщa$'Qt rAҮ6L%UY]VK*C2]ߖq(#綻ù&r |՚-܁Tn|"޹N'JaUx x"0z.G\-988*/s:*vSp/
+N E~/0pj`+b{]8R p8.␏FM< 2( PًOqRцE 1~[tUVe_2FOϬRE|j0,Qݑy5,;k$YhTIh⭦)J$5IPLp-<goj2]pJ`B9QAY<}>St+f@E9'2˺EQJB|6Q?TܭVﺒ)]yt2\P24tSVt9ۃ8֍dE_ qv'&gT<(@ ! A c%I0peȺ,'umOPBIFUؠZA06/T @ Cxn/]CHԭIM |Bn0RC+ŭ8y`t
+p8?MMM0(y
+Pjc gK؍5
+`P.i2UU$xo:* CqG}"WYB)#i !3?*Jq&9N|rgsWT/A%q E{uBOYW{ݴjm& yl09p is+-)~k7 Z4l x&k R+FXq(TJϷP=}ϙ:|"sPMq;kĵu8j::N-z0dԉ)&
+%Bga4Fgw=frh9nWNlю4-'BI$cmQrh& IE$(͡صZvL1f3ؚYp`#JfTP{G/#"ueύ3A\ 7YCꪨO0$
+;<eɴg rmoZK/g WbRâoDT 2P*aXXuHAy/{cyxbo0\H!,'=)؆X_ƿs46
+Χ6
+B%zd$a,Թ$1?}}cHՊ>—{ynj\CC@pBM񘹞geߓwC QVwe)^p
+"w ;LJؾUB#P[0X֘1i:M\*G&Y@}ttr aWࣳmA`
+endstream
+endobj
+858 0 obj <<
+/Type /Page
+/Contents 859 0 R
+/Resources 857 0 R
+/MediaBox [0 0 612 792]
+/Parent 848 0 R
+/Annots [ 850 0 R 855 0 R 856 0 R ]
+>> endobj
+850 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [499.749 675.019 524.166 686.709]
+/A << /S /GoTo /D (subsection.2.1.5) >>
+>> endobj
+855 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [109.934 494.352 125.866 506.042]
+/A << /S /GoTo /D (section.6.3) >>
+>> endobj
+856 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [285.368 277.565 301.299 289.255]
+/A << /S /GoTo /D (figure.5.3) >>
+>> endobj
+860 0 obj <<
+/D [858 0 R /XYZ 71 735.4 null]
+>> endobj
+254 0 obj <<
+/D [858 0 R /XYZ 72 646.027 null]
+>> endobj
+258 0 obj <<
+/D [858 0 R /XYZ 72 262.122 null]
+>> endobj
+857 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F20 331 0 R /F34 445 0 R /F21 333 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+864 0 obj <<
+/Length 2047
+/Filter /FlateDecode
+>>
+stream
+xڝWm6_+FNVZQݵb@.Ar@[-DTJڗ;w3e6 Xp8؟f͋W/. LVY_EQ<[;o>n>0 ؛ips!s5 >7r~]Oͧ~\x|Z>g,$HЈ'ҙb SE8S$Hoxr%}c$1L?5
+nMiHQҒ5劆FCĆcW&(sbxA]
+R4`
+cGaӪUݑo}YI<Ҁx
+ppRc(AЛopP RU(w{ّT]޾'^ʣap1zDx1B}SA9kFUe*P'NC
+liͺrY`gfydWlHܬVtP 4w\5ᬉ`} pK'E
+UeHZ}ّ\T!iآ
+endstream
+endobj
+863 0 obj <<
+/Type /Page
+/Contents 864 0 R
+/Resources 862 0 R
+/MediaBox [0 0 612 792]
+/Parent 848 0 R
+>> endobj
+865 0 obj <<
+/D [863 0 R /XYZ 125.795 735.4 null]
+>> endobj
+861 0 obj <<
+/D [863 0 R /XYZ 240.242 327.939 null]
+>> endobj
+262 0 obj <<
+/D [863 0 R /XYZ 72 292.343 null]
+>> endobj
+862 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F20 331 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+868 0 obj <<
+/Length 2220
+/Filter /FlateDecode
+>>
+stream
+xڭYKo8W@[I=cOo'lf@ۊ-,ito%Eqⴁ
+ߋÄVi֪h6+ nVlMpU58pWɁz\xbnĮe2k,Ss[VqEa:S<Kn=t( LLxa`MUd%SVDmcWlPFf=A19 pOsiWCF Ys$q%ోw _D/TK'л
+boZ߂.7߃29uC< RYmo*Ӛ
+U[h4¢N鲺w lB҂R98ecA]v)oC6.뮵R.oM5d ѱPUl.[{]VlRsB c@/F-,BN{@_> :7;Yk~mz zբG &KD4dhZx*@=cO )[6k
+>8jFrnW<rO51I #p}ZN4_HRhlQ^"Qp\ḯ!ZkQ5Xz uY|Z 1 s6'L;'S
+-`6ĶP
+8TRF!VcvK׉#qѕVp#H=ai,{Lp5p(@
+0l][ue} WW\Wa $p߾M'<hփ#8~^.c%N;7GFg9DKi>`5~Bݵ yVջ|li% 8zx["s5I@zpY쉀8yaVn0/~
+N_'D䱐_F?.f<׿*ҭuF_m<bWi>~ bRC^1RIaÞGۤN #9:w7gps -Ezhy5Tb>JSd
+X^ޜ(.o:!Aq }zP 9 gk1OvW"J $҂DxI1'|ͣz\B(CZǘMD2P֏mB'ŃGH#(d؟-{>l\F?{.4/{DxX
+3R1F G
+[L PGP@lx$ctD
+H 
+endstream
+endobj
+867 0 obj <<
+/Type /Page
+/Contents 868 0 R
+/Resources 866 0 R
+/MediaBox [0 0 612 792]
+/Parent 848 0 R
+>> endobj
+869 0 obj <<
+/D [867 0 R /XYZ 71 735.4 null]
+>> endobj
+866 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F22 376 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+872 0 obj <<
+/Length 1703
+/Filter /FlateDecode
+>>
+stream
+xڕˎ60Z˲ @iS@Q$(mDC4΋ Ⰸ?>d}}U-(ddyXb[-թrnA|Odx"Z2,w4l[x15*],L< y/WqP7NjjՙO7eyzGa@07]',u\eQiJ6uԚQup]t}%[&Ep4Pwu}7
+ V:5ǧ1W*w>vGT!)[sz2Rak!S~tNɉ mv+B'v9:
+QerD* r7ɂZlglΝDNN<6]L&eXN+
+C(
+_v?,JÛB]@]`
+R$iCGZ`,=^d'`4<A L%1< Ϡ4Q eO~JAOD 0 ~Q
+endstream
+endobj
+871 0 obj <<
+/Type /Page
+/Contents 872 0 R
+/Resources 870 0 R
+/MediaBox [0 0 612 792]
+/Parent 848 0 R
+>> endobj
+873 0 obj <<
+/D [871 0 R /XYZ 125.795 735.4 null]
+>> endobj
+266 0 obj <<
+/D [871 0 R /XYZ 72 702.645 null]
+>> endobj
+270 0 obj <<
+/D [871 0 R /XYZ 72 522.483 null]
+>> endobj
+870 0 obj <<
+/Font << /F20 331 0 R /F15 325 0 R /F34 445 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+880 0 obj <<
+/Length 3096
+/Filter /FlateDecode
+>>
+stream
+xڍk۸{~~#}
+Sw؄ި>?=8=#a<$C!O:Nbr'$)@+w'. FJ Jݪ !XtAvCҕ_s~䛝㕡Zs=5acQct'|F=vT_C}3
+`:xG`;%`=xx=@c
+%TrK~W*<!=W'W'80/ &b])JRa]AFATE]m4+1~V+ܽff"$D(,.RZ`XZw V$UY7J
+;5By2"muqEx%yb# 铆0JzNڬ*D3[<F2,f ґJ{io/k "ۢuXlꦓTn~Uj!qU]wJL8O%[(R'MK
+8G'XyViZ:kQTa9P_r෥`4?QT#e_nW^a[Q߈k-tVeSRBnxJ9䳈l
++&)Ü" o쏓F8xʊL8ot"P?YӱtHÎP\f0b.q>0ϨF,,lȘ[XY=tD4b"{/dQqB`WӠ| s:~
+
+" W +ԙB-/Ѧ.rϾ3•\@+W4[ \f@7+pز0$5#zӝ#lK2v=e☞7ڍڔ)n~)Ŝ\bN'
+G'|OOo }
+wBߩnE _f r=NO ]}eW<)!5u/O0;4Z\hO'QN- FHѰR+,c#BCnjkU'EV1ƖdI -Uj
+z/X88JϘr?_FY)} I<94HZSݚd`c4; 'Ng9BvHߥ(aљL-\‚AY,27V*T1237v18|!=RDn:%:3Mm.$޻=%/%O<$m]L/% .we @Ŵ;oɡr%q <cv!^zpu .HMCojj͆ a=?y`,zNvS$X]W}K
+8Vx ^|##z8n{ϼt>7`S~\&ƍ[jaЧn
+( =ósLAgSUS+/4O被>{;J
+(K3-~ԑUyx^9ATMLa6 <e(h^޿h l("/9B7]eh,DZ,lp
+EC(0Ꜻ='(F⅂ſ\\!J3tgؙ_vV)}=
+endstream
+endobj
+879 0 obj <<
+/Type /Page
+/Contents 880 0 R
+/Resources 878 0 R
+/MediaBox [0 0 612 792]
+/Parent 882 0 R
+/Annots [ 874 0 R 875 0 R 876 0 R 877 0 R ]
+>> endobj
+874 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [127.137 566.626 143.069 578.315]
+/A << /S /GoTo /D (section.3.4) >>
+>> endobj
+875 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [302.791 525.978 318.723 537.668]
+/A << /S /GoTo /D (section.5.6) >>
+>> endobj
+876 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [343.458 525.978 359.39 537.668]
+/A << /S /GoTo /D (section.5.7) >>
+>> endobj
+877 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [459.638 453.099 475.57 466]
+/A << /S /GoTo /D (section.6.4) >>
+>> endobj
+881 0 obj <<
+/D [879 0 R /XYZ 71 735.4 null]
+>> endobj
+274 0 obj <<
+/D [879 0 R /XYZ 72 496.986 null]
+>> endobj
+278 0 obj <<
+/D [879 0 R /XYZ 72 194.376 null]
+>> endobj
+878 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F20 331 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+885 0 obj <<
+/Length 2739
+/Filter /FlateDecode
+>>
+stream
+xڝY۸bENc)QE4)Mq@Q\צjd'z;/R#cpH73Q7z퓯^FT ؘvwS훯v:M(WD߼ǻ~co^aD|oy/{?ZgS&+bl*fnr$z8p3^Ho֩E'; kj%Y?nmKd:33_,HWqLkf>췗Kw[gq ['@&}׬h88nno9MwLlmӸ>Xն.o+m*D{@u6|'dm7χURD3[q{~s6ywv8wldJ/֟:w5twlwW h. bp\߃bmv
+d%xPv܃۞c_R62l3p3I
+Jq['um@=@ WkYY⁡@M+ٞlpQ([IoEޟKO2'爤v²pVC6K:<[d"nWnN<aO5S]Fqgcn:Ӱ؏+HB{F `baw~*['s|S<y)`鏈Wօ,7Z4SO:H?[ d<@ܒeľ
+2~x ˟ӹ;wQ$ >R`LV^n\a}-djgLZuv
+1}gdjqklDJrIV0 W.Vbb= R6]ZבvL?
+8J
+-PI]ҷѨBVP"=D)<P`R\Fd5w@S^֧HxA PttONj
+ٮPH0w< o˃TP|/͘K.0H03)z-B~b% `ieL|U>nyRɮ8.}{t_4IɃ9պ3M=nq2Fk^W;cP|d $R=g7-*Pw87CBs@% <Ho.Btq(3_ݺӀZЎ1U%=zl~J4#6}[nQں<SS.THU^>CO۹˫',
+endstream
+endobj
+884 0 obj <<
+/Type /Page
+/Contents 885 0 R
+/Resources 883 0 R
+/MediaBox [0 0 612 792]
+/Parent 882 0 R
+>> endobj
+886 0 obj <<
+/D [884 0 R /XYZ 125.795 735.4 null]
+>> endobj
+883 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+891 0 obj <<
+/Length 2543
+/Filter /FlateDecode
+>>
+stream
+xڵk۸{~/7~v{)C@Q\h[XYr%*7/h7wXp8
+Vyū8\ RE~b懛o߭7q{({o߿g8H7߾a~.LԓT8 xE <)M(_m"*cbCMT7JζFy9`ҭ[v/`6T'iڄ&[>k  E`t$@ً!(rFMxM>?#|^kn
+aěc76 [n^SU:ʽDz>2xeBm"^IȚOf[yCag>dGXsYðn㦓)^h( HԻ'+#yuKWgd~&g:N2H5iIln>],zyy$cX'tWP!pnĎ1uU8[9 /9A n.|VۦePWHeuĶ^,O<Dhі0Vfpp:xӬD뚳@v T`g]9RM{Z 殁 ]3O%՚7`%ꗠZG9nSWY-E=#t8K;,@ 5rB'Bf
+F. pa dBuix2;v 8W3s
+-@y{ჰtoY_zCtA086Jvc`N8lQd~}5 % >+4=0PMn(Dzxd>-X:ݹ7g4,!
+q<a2O@.xf<@(m:w!
+89(9IT=}'lXtD3D~b\yP7 }*%p>gq
+L'NJǥ3(CؖzWu\La,NQ)*N2BT$Fԍ4ARe|CI/v8F?C d, Xxahyr "4Fc=C^s$+N2] SaQ=% =Rv\TP(Qxw%Ixҡu9궨L}%^e50|%,MUHw"UW-6\71PrP,OVk$nbl
+cF'TbdGaE X󹗻hyt ܃/]߅ae
+Db*{
+-N?*`?\фjIZHDi<!ˀ;;T-uUYwV+e043<w<q%j9k܋%E4˽ v$E!*Q{*SAT2Z
+1(}Gnz+uRLo'7-|J/
+TnM0|'A
+endstream
+endobj
+890 0 obj <<
+/Type /Page
+/Contents 891 0 R
+/Resources 889 0 R
+/MediaBox [0 0 612 792]
+/Parent 882 0 R
+/Annots [ 887 0 R 888 0 R ]
+>> endobj
+887 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [122.894 288.427 138.826 300.117]
+/A << /S /GoTo /D (figure.6.1) >>
+>> endobj
+888 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [351.153 139.386 367.085 151.076]
+/A << /S /GoTo /D (figure.6.2) >>
+>> endobj
+892 0 obj <<
+/D [890 0 R /XYZ 71 735.4 null]
+>> endobj
+893 0 obj <<
+/D [890 0 R /XYZ 130.123 603.811 null]
+>> endobj
+282 0 obj <<
+/D [890 0 R /XYZ 72 123.943 null]
+>> endobj
+889 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R /F21 333 0 R /F22 376 0 R /F20 331 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+897 0 obj <<
+/Length 1331
+/Filter /FlateDecode
+>>
+stream
+xڕkoF{~=TƎm ƽk\^U-f 5MT0$'!<3~츭Ym}8_u:yq
+}Nt[io`Զ;svO6 X7q~{W^wWz ]҉A+rC!v9^زIe]k.%A?}J@yNe&Y4uD3aR}
+endstream
+endobj
+896 0 obj <<
+/Type /Page
+/Contents 897 0 R
+/Resources 895 0 R
+/MediaBox [0 0 612 792]
+/Parent 882 0 R
+>> endobj
+898 0 obj <<
+/D [896 0 R /XYZ 125.795 735.4 null]
+>> endobj
+894 0 obj <<
+/D [896 0 R /XYZ 257.621 184.477 null]
+>> endobj
+895 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F34 445 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+902 0 obj <<
+/Length 2700
+/Filter /FlateDecode
+>>
+stream
+xڍYY~I,
+i~צ@ud q7y(ǎk cm Kafvb [K`+bBF{a Q+箬\VJw3u`oqĤ.
+ܕ2û;&~9Ú
+p-Sh4R "cV`&{}dGb&{K Ew )Ku->8@ 6:%oGAQ_q׉bvbMGĸ^U Яj[RM^. IlAQ腔`uR Y p{c\~o7Y%Qs 'soT?)nX&]fE!`{<86MD5)Z$bn򀠷$8a3Z"?̽4!#LW쨫0|2{znaaAw*k*/'bSf.h״b~$Us:#6\KGGcI\YHP<JBV)x䎿Pm0 T RiM\&L)Lx5lٹ,'LzǝͫkFR뿋W.iuṞn*dpe4O{NKݒ!_y0%RvpZ)'4)Ԣ
+яP;L XTozHvBeۗ_,+sw(Yଵǡ286[IҰ1?АE&4nhx6F ,'ǺqfgvVI>a\"RH*1[\dgmsl䤰sv[__=%t 46(3͟O!ngr)ʢ7+ĠUvԯQ4ڱk%T{ݏ*ZZKg`NNT\:1C|WBMO?L;j8*t뉡0h헡luij8_s9QQVQRA#wcfd;tJ=ܫ3*EZMk]=:f9UD5k
+9EbJ@4&trsZ@J\wa)O~ɰ+Id:g_ìʕ؇~KS᪏R_'}{&r:K/ J_x
+Y#:`S%^|i'Q-cC~gZGZ#uEupHCf`p1BiE>M#%Krei]E3QON&] ή= n3.$gu^ ɺrgt梏Rl=fUe4$Z^Z1brQMKLy.ec\Y[q}Dݴ\#t zN\DdP$+u‰
+endstream
+endobj
+901 0 obj <<
+/Type /Page
+/Contents 902 0 R
+/Resources 900 0 R
+/MediaBox [0 0 612 792]
+/Parent 882 0 R
+/Annots [ 899 0 R ]
+>> endobj
+899 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [71.004 389.43 86.936 401.12]
+/A << /S /GoTo /D (section.6.2) >>
+>> endobj
+903 0 obj <<
+/D [901 0 R /XYZ 71 735.4 null]
+>> endobj
+286 0 obj <<
+/D [901 0 R /XYZ 72 702.645 null]
+>> endobj
+290 0 obj <<
+/D [901 0 R /XYZ 72 575.997 null]
+>> endobj
+294 0 obj <<
+/D [901 0 R /XYZ 72 488.825 null]
+>> endobj
+298 0 obj <<
+/D [901 0 R /XYZ 72 375.161 null]
+>> endobj
+900 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F20 331 0 R /F34 445 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+907 0 obj <<
+/Length 2104
+/Filter /FlateDecode
+>>
+stream
+xڝkoF~0UD _K-8vIs
+;4ÊZIDH%m{gvfIa|A#*g컋, ,z7[FI"f~/8RX.WދpH?!7w1D,}b.$X/_'ypxm#kSiP0ld'E&[z
+X-^bDhK濙/HjV!m'!Uh%EAE"av],Z\Uo0Ֆ4tP˒$kdZyi2-99d)U'W%8͚3k%3ړ՜FPU'r]*'_!u!~t*r mFӳpR DS6%N25@Xoy+O*C0mQʻh-/msxdž
+c<_@Dn}<Z{KXyzVojE+~Gx]蕄QɣY7ȸIxF Smc%GuL%[++pV#lZC[֚̔8-G|]&ݤ V #}
+yGl"dw bQZa#ja&BUي-i#[ݸs _`tڢMHBr+o\
+ڛ`+(<XvqqͰJΠ"^2:-KGЧ7.P*eMPx p3Fx\̖-3#9Ƥ+ls=<.YK/,aT3=Ѓ/l;`6*q fM_)g:!٩hɾUlQ] S?sc!X:z;H7(Ϟ?l:CΩ0fc2* EHjs+nn+&QvPE0e
+[Lih$4 `Ѩ~㺸k3@NɸN˥DﯦiUpHWTS;OH`H>;՗E.yl5 ]uVbg]gE%~έDIĽa
++ aKB:c_[&
+Zbm@fVDLA~
+-n0WW\O.p?fl1
+
+ŭ's{ o10'iĿ[?
+d `S:8w>ş >Z*."G 8/B“iQzo#@?r N8twV'i@? ʹgc.gI&0 xL3>eg4݂ \Ŷ5 Fa\ps-"N5glܤI"·J
+endstream
+endobj
+906 0 obj <<
+/Type /Page
+/Contents 907 0 R
+/Resources 905 0 R
+/MediaBox [0 0 612 792]
+/Parent 882 0 R
+>> endobj
+904 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./dropdown.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 909 0 R
+/BBox [0 0 621 108]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 910 0 R
+>>/Font << /R8 911 0 R>>
+>>
+/Length 7051
+/Filter /FlateDecode
+>>
+stream
+xݜ;-q+v&jWl81`ͤ
+khyn 9nub=V=zuo]맏9޵[~Yc׷4^csK]5_wFϵ~.=[Fz?~ Ӻwϖ>u_7o>R*=.)[mt?rfU߿~V|ij
+iTkЯN6g_?.6wW{۵Ten#9I*ڕ\Ju̢G߿9-i鹢{s?A`}G+}{zNo cma#{{_~5)@j$)Շ^^ja?w佊_Wȿ{kǯݬ~x8cvT^.^:bo&${c|w}{y]p>toݰp_Ͻԫ8lYuwF?ӲhUw=VXAnd+^a+~ƣ{]JXoWek
+i$9aH1
+@+g%k@vYcGD%C޴[oJ08ura:3GP/Hgk C{qO:9Dir^2'D&hD4ʣ"HcVC;[u$ %9䓯R̗%ZH:{]5s0mh\Hڐ9Im 8\0@YuBDu3UulG9hEN ZA􅐬|VcL@=MA$v,7G Xd!=M%KGZ
+ː/nҶ*_tx%2D%n\"sB8MINr/3PӳZGۃ*?u:63[Bni@.9IXPve-#EsO\_O wDc݈܄ -]z !{u ڢPǔK Db)UWTflt$6R+YI/DIƒ{cBGPvGpAv>q]qIE9t;L[N?<_SQ*sl5r i/"ƣu3'HG@8-!NZI:Յ4ܤJMzEjwcstG}AlYbq3xBdY(]hX::Ѐ]o
+mYq_J0|KnBq dPdC&A@*Ѯqu]3]
+e3)ܲRZm}8K%ZϑᄭG0#LERY Xt!hdOtXA o2\yIAw=|KnƤ#b71s[ѥKzr}x  }*\5KHMS +*sӭy|TA{/DQ/DiqM@^6#VcJ~,iLH3 (r 8
+?LV{\*Mf9,>_zh'v} ͞t3$Y jd 7pD5KO zj;ǑwWG"eYD4E1'f˃g^KZ,+WtGr$9YRw/iߦIQ;ɸ>!= eߜtOD2ݩ+|\.ԛ=[="O_!fWdDW.So!~Bt\]i&w}O΃)B2FWVH^v;DcdށHE8琝ORHg"(Trrj8S ꡨPv$(3Y(<YO
+w])| O6,E $Ͽ6VZrҐ dĆM#xb{\!;VdH9HH/pCۣi MY
+AId\t:QAf
+vh}*EX{TPw2pˋzgFn]mxZG7z0%ÛTK\רD(j9$qzHPeL/Nj9bwip'7\hwr{ޖK2BOױXh;LΕ
+^k޵5(z]+8&/zQrSd:G)9.*(ڎT
+Bv\LO+.. S|ݬ GBE5
+V
+D3vы4<
+˔,:m!3^RGXᡯ@luEkQy:eiYMvx6bN8{%RƌV<&#GdB, }HC8TFIwkmY40G>9y=QtpO:e}d/Z l0hE&:XK1MjFb oBʂa zGqWZIWoEA3`r%LsDZpQSڷrDCs.+G܂%.!w fN%n:8D˚:Um Rm1t!Aɽ^a&l;\n;,a
+ vH//%̺];CZX3܎h}1&y<Oꈉ } 6-AaDp●#@FUj,׊Sbx3R"  QpL,TXru@5L
+U1+vlX\,sS^% iePvzq&}c/ʺ
+BY͇իȓ9%G‹\ӓ'uk_ ^|@¯S mJF\FiRv>Mp qn-]ˆ9i7"zDہIU^r։\<x+h t?g$Z~2̨qHxS45{To=gǛgPGkdH)` vټLZo-΍nMrdw~4qB%9M*ʺ 1ꚕC2
+YtkۏggZpI2>}MW)pkתSj.ZLgfM8~44V8Tq\Q2蓣J|
+Ҟoj _<rĄ[lbٝm2a =ydLV7nAqU.>pJC.wtPnƏĐNf n'\ 0D!ׇIN t/M
+K!gGnnN@,þR[kJ<qby&iw{/k}92RPuV- lR ?Zp|b)[F'cl/5bc
+ʸ:߷$1Hl8!ʯ_tL)؅ËE]gih)Ӓwjhd[eT_܈) v en|_0FZSz*fatVa:}FwGz:72wHw%}1 !ཝgw<1+|:J.y
+>GD(E627׮80`v]1Ip>@|:|=i|Q;#s{RH!g1 PM)=
+| r~'_:7F|q 9dfacDIP~ 3Mv' |j2%aڳP#'Tf)ܕS,ԞֲǦcKr'Ō 躧䐼L Yn{NMb*F<ڃlk>p~n@3^'!8e퓴|r(wR{ ;D͇1f2>Hb5>`}5"Ê<NLOiF W=kEv((ô`)*BC<c@̾FBYj6և(#z>3R݋2oPE,JL@a@mJhsh 04|766;lNMb CQP c<k;>8?~G^O?~w:_?#g|&x0K}
+'wtQ"*qrO'U3Ͽo^?k2I\䅻. ˵Sy,{ǿxA䖾!6rq^
+endstream
+endobj
+909 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195621-05'00')
+/ModDate (D:20130211195621-05'00')
+/Title (dropdown.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+910 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+911 0 obj
+<<
+/BaseFont /HGQYYS+Times-Roman
+/FontDescriptor 912 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 114
+/Widths [ 250 0 0 0 0 0 0 333 0 0 0 0 250 0 0 278 500 500 500 500 0 0 0 0 0 0 0 0 0 0 564 0 0 0 0 0 722 611 556 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 444 500 444 0 0 0 0 500 0 0 500 0 0 0 0 0 0 333]
+/Encoding 913 0 R
+/Subtype /Type1
+>>
+endobj
+912 0 obj
+<<
+/Type /FontDescriptor
+/FontName /HGQYYS+Times-Roman
+/FontBBox [ -9 -156 707 683]
+/Flags 131076
+/Ascent 683
+/CapHeight 662
+/Descent -156
+/ItalicAngle 0
+/StemV 106
+/MissingWidth 500
+/XHeight 460
+/CharSet (/D/E/F/I/N/a/b/bracketright/c/comma/greater/h/k/one/quoteright/r/slash/space/three/two/zero)
+/FontFile3 914 0 R
+>>
+endobj
+913 0 obj
+<<
+/Type /Encoding
+/BaseEncoding /WinAnsiEncoding
+/Differences [ 39/quoteright]
+>>
+endobj
+914 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2047
+>>
+stream
+xmTyTSgϐ|I$k(z
+
+梨 Auؑ*i8ggoi$q^) R/ŮݿGax ^^0rY%p䬽C uUhl%D+WЭo#:UWr~
+T:Y_EX Oh[W], Zd*yu&
+:~9=I#V5$ E(hd
+h9ppq
+#oςj1wTrChyE=ڍw>E-OAwB:_CHHͅG1sAq ^#]>Oor4@Ƶ|׬':c1YO\wȒYP0unmsi۝/GL%֨2rVM# 
+endstream
+endobj
+908 0 obj <<
+/D [906 0 R /XYZ 125.795 735.4 null]
+>> endobj
+302 0 obj <<
+/D [906 0 R /XYZ 72 633.652 null]
+>> endobj
+306 0 obj <<
+/D [906 0 R /XYZ 72 123.31 null]
+>> endobj
+905 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F20 331 0 R /F34 445 0 R >>
+/XObject << /Im34 904 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+919 0 obj <<
+/Length 1999
+/Filter /FlateDecode
+>>
+stream
+xڥnF_!LhڇNmz($J"CR;Rd4=;{fg-v o٣_{Xoi
+
+u7:*x -7'Um p&]/+rVk,ŎmF{e]CҌnxǞDaUwf. Eʮm\cń4.{4ec3W=( N m}wnJď`͉(uB
+#w2}
+Mg$=-{`nPl;;TŽEz;"٠0(0i,X4 @p%%!\讱Dok2D5{vNs`~8V=Gve'ZAv-v)&gk
+endstream
+endobj
+918 0 obj <<
+/Type /Page
+/Contents 919 0 R
+/Resources 917 0 R
+/MediaBox [0 0 612 792]
+/Parent 921 0 R
+>> endobj
+915 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./conds1.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 922 0 R
+/BBox [0 0 596 159]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 923 0 R
+>>/Font << /R8 924 0 R>>
+>>
+/Length 5062
+/Filter /FlateDecode
+>>
+stream
+x[ˮ%qܟ8ލ L sk0^h [_$,V*>W|75UZNQ5jylWǕjlazIUes؏jhj?^{F_/嫥_~CyBzw{ۢ]-bXW/c?cP7hW cCWzb¿kkXZ=̝.;UQd<Q.
+ūĴ]ZH- =z>6!& 93XZ}BY>ZRv( WDŻ5??XzYS܊[oEޅT VV
+d27;VRW_=χMdl~ֽ&wߘK\fW9,5mBa>[sdYaYܶɵ\}t|ְ D4x[++$ge?(xx߁l y*%7|{l\%@Ԋc_5s~'0goP}<=KsoPLP-}7qHӌ#PV1r|dòi;aWſ+1v!7joN"32O 7a` 1
+@"SC5
+/Y!{$E_FKZKi_HѐQ|իG"re6$Zsf
+C>LhEaCV;!ߎ X'do԰AnI0M2a@  gjZ@"(T% T> Rb|&O#ɐ]b3J+( 6%GķŵxP% 'f +$KPd;!!VӲ=Ωl,hո:+e]C&ҵK*g'V_CRȴɑK"IM0}YtEAkN-):F4v2K=2EDkId8#dG@Fn4Wk2 a͇6Wjd^Q
+&$:0h+DbpM_,V =IL%l$ D=~^Oh܏1,QIA!JGBp2qGsX\!7 rx12qKX;eNs-L)3ͣ-Sg<xZaY\Q{#I,Ht[@ YL Jxح&<&Jg(-Pd`ĨpRBM
+1O|Kpuy;R*$RP82cjȞ 0$ÅD3{.c쁸SJ@E
+I@IH{$JYj=ע=s<$"0+r6۰NʧQP_
+[>A)aR+BU80[ӁQm#Vax
+ vA3ER*A=B3w ,HDʤK;ق5o Y
+gHoKq5G
+A=D,u4V1şM{Zfn"4֦5h]| la- 3.ٴ4V,qŠJI &]6._LK<L˘KxI 恌x=T<`T衻l`T ?clxUxUG7#ydoA멍}Ҧ0T+'Πg,t+15XQ'QC\0~Ñ@Tsa"zl[W@<+TԸDirE@Fi6Qq1nHs)ME<1ߩV(Xtw 8Ofd#9?72[S~*x`^ɝL,X}<1^:0Y@2Edxl0i^d57M<
+-b,rlxNX|'R .em#Y iSԽf[ƅ\q9bmB ٜO<"o+L7Ǭ~;
+I,¨НGD(]Tٓ;j`Yix䙡-F$bjuRx~<]3PUFX{ˢk7MKq҂\`[ ]Y`3ӌ1U<Ap x.tBrT)zuEj!jVg"ߨu,0_? `DvS[3mH|ݺ̄I{27\CamxlhڙwՈ<p2ixo@5 ) M)̢;O:@[)A̮̕oFgRS
+bWk]Ulh G]BzE:+<m͒gC1WU{uÿb`&sƖi#a"ܟݥ J,l\JM6lDVE ȿ7Qn9|j
+y=N#aм?>dݽ%eŻK%<K'6f0&-R3H;OeRv,ti;D]Veq͜Oy6ȎhxkK0mbFu7}7kXeYkYfMe4^ݣ9J0H"e1Yؑy +}N /`: N)?ҋDQ"s<txʵzܠBx78w[8i--[֡1i փHYLʑyYbϓlOLjAc6(:j;R_j0T83b#69XIWӼ8mUrBsOn06k$, 2 ?oku~ ѻ$n9u[3˸S6ry;8qFn%[q>*؋;v$ⴃafE 8RnÛ0Ңٗ+[s>}--t#<v7"yªJt.g>-5_RŨᶽQ;賱`YiHm}68']ɤXİفX*102U# G$st]_5a@_TZR16\b5脆3m=>V̸poƋ(d<D"4
+endstream
+endobj
+922 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195624-05'00')
+/ModDate (D:20130211195624-05'00')
+/Title (conds1.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+923 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+924 0 obj
+<<
+/BaseFont /NMQTJN+Times-Roman
+/FontDescriptor 925 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 117
+/Widths [ 250 333 0 0 0 0 0 0 333 333 0 0 0 0 250 278 500 500 500 500 500 500 0 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 444 0 444 0 0 0 0 0 0 278 778 500 0 0 0 333 389 278 500]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+925 0 obj
+<<
+/Type /FontDescriptor
+/FontName /NMQTJN+Times-Roman
+/FontBBox [ -9 -177 775 688]
+/Flags 131106
+/Ascent 688
+/CapHeight 662
+/Descent -177
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/I/N/c/e/eight/exclam/five/four/l/m/n/nine/one/parenleft/parenright/period/r/s/seven/slash/space/t/three/two/u/underscore/zero)
+/FontFile3 926 0 R
+>>
+endobj
+926 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2547
+>>
+stream
+xeUyTSWϐEZI_!IV)p: XE
+FRB,ʾdqAQĶh؎r.3g^39$I`J@VڿW0 Iff1DŽ7jlD@g>t@GEhjj|_#8$R⣎KMPȣvK.󡷷8"LNJ/I2:N%M\+aJa\GF"+e1b?RN/Y.pwXPEh5◞
+!h/|
+J\GTH
+af(זhE IB|vu~&;Vi:DlL&GAvJaU^S6 ޖ[paM׎&nk-MpDG ȼ8v:W}ƅ0{h%ʎf ͦl9S|(,-7h+;<ώCW/5_'%2Po)B(<c+P|oVj0;`,?/BϰQ7,0
+s cV 2YM%jR
+{MEy֞U/+Yos'+Q O HAwaZ_U9Sp
+$7'fg=NLq;Y@1~eO1LtL[Km+=$#DR?\+gt͉a[s}[Ud2ZMvy a4DkeUeUE}v_2R>KUnj(
+oHêv1xe!eS ,L ۉY bA <t<v4ܕw뼬/2'tz4셡pL?"z,X>BfuǀmXM2éqc: EmHab2`~r d~:K`8,+ Kn-M cv #,FB5@_OM▦n5Foaw;)I
+J1ZV%jFmGgScGE%bmNW&7?@;.)P.w+kK1fW b[w{oqԟH}Ywn2ͭƳc Sǘ<I%2a\  gɎ8W4r5
+4~c ^& bl͙9b"F\ѤD!2ZsUTkm)?7:5;Vr) ټMaG/x.yLXRLEڛI^Uۍ=c? ()o uMsBz1߸3#q@[t-RvW\:@% bA
+,Ƃ*!^ےpDk/˂ R, VU?:SO;C͹l~*qP1+ Ẩ]2L swJ/jE_=6҇
+wGob%\,2xj(E Sѿ7{esŝk*AP͆R4dtZV
+M7$xJnK.nt:~ݩ33c66{"1BZ.;-}ʪP.F.T;s] 
+endstream
+endobj
+920 0 obj <<
+/D [918 0 R /XYZ 71 735.4 null]
+>> endobj
+917 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F26 628 0 R /F34 445 0 R >>
+/XObject << /Im35 915 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+930 0 obj <<
+/Length 2521
+/Filter /FlateDecode
+>>
+stream
+xڍYY6~_Te<@7_YV{yJc
+O~J5LFn
+Wpϛ7w7~JUEXDZrzכ$IT7|>džVo^}˴_>{wzSS`3nBYU* 3zE&(@]sM) ")Bxu$]wocYos c)nLN $awfjFۮ\=1<qFGcekOz^bpXxh׵e5V];H2}))'+ZDwb -Di k9 @3DٶFcrQ=k#Mq=P#3L;{!ּQj2 ShAWnxT=Tٺ*8Pi$¥V@<qQ(mt}KhPXPVC30 8O`veׁi]ߑ
+V8T'4󗥗9Ns}$wEn@i;8n"GfNQa)ݰ-Çxg{jf]4vdE Ρ".n*Ws=n[ܛ2E Ezo3DQE
+H]8e'j,}][?1c5fF
+ON;^<UCcLTjܱ*ae
+E`aX&_"H̬vݱ/gA%k0oF'2Fݭs0WTUG #4jF2raTr@uBɹ
+ק#[v vr fowHG6s=nd"H]-D~w|06͐BrYr3O MɈL-KOCo ֋
+#|Jx,6SɽoOϻR;7;!͹==-
+$PŕA,$M#Đ z Lp?;BR<X=*W@ȗu$0"AH:h( @_ \{vV柪&T2~#X #e&kDLh8O&qPl{lN ɴOCW_=g\zȃ+ldjVsr <'{<"占WZ| K;E{B
+#%DF!\(~H[aph0R:[G\<N:qy:{Zσ aD]h_7
+ 4Ȝ#Sʮu2'(F0.#Oqln WT("0-زљj4؟0JHQ/)C:=;*ˢ35r"QI ܣ~}FPOr-"\mˇ\3a u]lsSDĢt톩"/ A, 9.,2I46C:ԧsAϲ@XH`D>C-Nh z.Qg 87B
+\rʁ{@n%+SɄkX{bvt.]s\qHǁ SEFJxF~8՟uEɆrJ;;\4}Es f0q</$16/*j<JCv8wP 6̂C.^>RZ,
+;0t?np͌ ЂK_nL*%ȏqg'rrxN` A
+endstream
+endobj
+929 0 obj <<
+/Type /Page
+/Contents 930 0 R
+/Resources 928 0 R
+/MediaBox [0 0 612 792]
+/Parent 921 0 R
+/Annots [ 927 0 R ]
+>> endobj
+916 0 obj <<
+/Type /XObject
+/Subtype /Form
+/FormType 1
+/PTEX.FileName (./conds2.pdf)
+/PTEX.PageNumber 1
+/PTEX.InfoDict 932 0 R
+/BBox [0 0 783 154]
+/Resources <<
+/ProcSet [ /PDF /Text ]
+/ExtGState <<
+/R7 933 0 R
+>>/Font << /R8 934 0 R>>
+>>
+/Length 8328
+/Filter /FlateDecode
+>>
+stream
+xݜK-QWlf6+ߙS$ anzkĠȲ:UNJN~7?WF}Qޫ7Jisϯ;JGٮo_11-awMU#|U4}_~f_gz;}{d626sF>}nk,< W twS{uq>kr{'rlyFo=?5gDjN櫓V{WIڈ9TYxuF~G C_lZ.g}qy6,ι>>HhޮgF*ys d$Фv /v3Q\oQ^-|7]O)froDƜIqE:$Kզ)zՆL~Nw ه؈"mg t}ϒ=9Gy<bv_%>4xZj^GS}EBDlnWwI>zRjl#
+<?]שׁ/:}.--%2O;NE]2ږ6K6GI6eEza]ru
+{o/8R}Y2|4B+3l{wbIч1aH>iKO;u /0'#Y9iy.l+9~}hY'c|[{CsLN/]Vt `JOsdd B2e@">(H74C
+݈@pn^H
+AodɲKn<.Kk}h=6}
+;롧3'F(<{>z~m, 9)ےeS[/N+U0ѾYBH!>Wl
+y?NY?,hs~XzhҖF|L]Ucz#><>72"<jOD2mTTᅌNϦj7;t"E.^XC(0ܘ1"]Ѵϒnqo놷s@/\eɫV̧3Y۱Up֦]sSZ®m
+}ZuHէ\~-T2"6b=
+s@٫Ү.g5ZD5Ζvˍ3
+cRx\g3:`|1?ʩ:;b2p%14BQp,IcZf G3"5b׵9_-Ek
+-"])7# jGfF;sʘW-vfD;3q&n
+kJ-!)8״.(+.=a"'ԈcDIhĭQ1?A ؑ1;n>ӡ L>~ |tNs"xCzs>&A{)0U0 Ƶ~V $m/|]LW5[K3<yBDM*vv/Ēܙ[%rԩN9BNɗ:PƁ(!s ˁ4;}!^ D_x1)ks[+f]ĠΗ$DcGbsQ^`V1 8ti1qbRUZ#-@\ kf8p.ĜuADQα<"*,
+;:*;|fE6WF)f8Vbv&}H5I;I-jɫ: r&>sS\mKjH̊Q}w @,ɒUVKQ]Aq諼 '6wЋ1͙Oh
+k<o[P.s vzckpؑK'@NP-g~9€NḟGѫIZؐsׅ*R\%ѦIh1/)qQ-3ΐ*#ktI VFc9.x ڻUІw7BpBOQ_el3Voxj'bPV(~:!M>~Nv%V#w{T5A*? @{Ft dEBNFv"g;TÇ}|I\új
+eI:=lP,d;iᗧ{L;_x(eʃ4P_QLPsi0pC:I|•58h\LYH-H3W Rӣ>lEW䰵6<to$> .
+1FQNj^2H
+
+z ={L2g#!Fx^A]܃ݺl_]:H
+ uIO?F@t$4 #
+*F!g<ms /+>Htg
+C6&ցa+y2Dd6fԉFVd|]z$3DG!kfJ+௸.Ҷ$"x@4!ATbl퐥zaucdr ߦqBxnI=`ԏ3's$k4CK0 3TUᤊ)՝*v3؋?$Y,F8fnNr0 2RIH"Ӵ"ѥ\잂'qgwRRE;gbTYku4Q(ifMf&2ےL{vYPX4J8FcIt'.vxKYaymA]%l̲L2%M~weH06Bf) y2 yZᦐNX9QY 2 '/jF1IUd˵7SyApd$":g
+žSjS!֎`ybhE
+<2s^d
+eW$W"6/[yS&ƾAl>52$I! <J%#4b5qsi8{HHtL`c=;[۩2VvW]*%ZAVvN6Jdo۩;\2JTԻ.ŊSCw&J;]ݐ첞n*OF#xl.nd<[uK1vqs.!J"Lm6v3D<: csgZtMbSqLjL:I} w.GMvPs&|L,].ש!X}UȬA0KtUw@qIN/IXyn4fVIG
+[80nJq<ﮔpM!yhm`H&rWr$}[T} W53BX^̖^H)Q Bo|9#o;~m>܊ѫ[*5h_;^FDxZQ5hV"_4S,OWH5T𘋑= wn#Tȿ})8TZxvzrrwmǥ E5G.ʩA.z,hԉ2Sθ*gVLG,"G/E
+m.7TgR,7QfS-U-HxFu5IDQ*eyWۈ6xZ2t*
+IAAd@lzr:h_) Ļʡr -%F& NbG7ysaHX}׈˔vՃEs*|fdT=UEWdVbͳo4C^k}c'3m2r$wĈf(֌bM4Ir:OcpV茏TIԓft! *N+X'aN݀ ]풄\;
+@Z)ROnrX/ 0 VYW<rr 9,`-kXe4U'#UYBڈE³N&^ZN8V(O걮d)95+U}~H%O< *Y
+r-*]]OUaTiWȰWt跨X'߹FrRMڹ(,o4 䄛q_ uWe# $~a6eiWÌ.Ct66=ȝZ\qH5c3Wp-%0>wKԚγi\P22k1q7iQՙ(U9k4g1zM{'q?qUΘ\Tj~wς{˹ ,jU'(L{;kG1ݢpj?e"nϺ"U-_ ~~ glFC!c[ 2S{6r0Fֺ-Oav&DuМuB)eWJU(#]^y!+*Pŭa&;tz:3Rp-sUԮu_錡4ȭKi6j
+b(H;2LԲ%G֕=ucO֩S!d7_Y#cNn֣@ZgRyS'
+?|0:Ғt:
+-ȏ"Uj%e.Px h&F:DVEH]ȋ}!i]5by2.cV>U/p.,_qGq({pq /}>z(ۚ(G"}kWܱ\z(;N\Irn@_)_RA\^?Wp2U\`ŏ?)ƕ(m_OT708>w m8_BU:5_?/?_rI0Й`iF_5
+aTs~!Ld:;k7ꆴ~ȑS_]%ĉ$x[k6PzK
+endstream
+endobj
+932 0 obj
+<<
+/Producer (GPL Ghostscript 9.05)
+/CreationDate (D:20130211195625-05'00')
+/ModDate (D:20130211195625-05'00')
+/Title (conds2.fig)
+/Creator (fig2dev Version 3.2 Patchlevel 5d)
+>>
+endobj
+933 0 obj
+<<
+/Type /ExtGState
+/OPM 1
+>>
+endobj
+934 0 obj
+<<
+/BaseFont /IJYNWX+Times-Roman
+/FontDescriptor 935 0 R
+/Type /Font
+/FirstChar 32
+/LastChar 119
+/Widths [ 250 333 0 0 0 0 0 0 333 333 0 0 250 0 250 278 500 500 500 500 500 500 0 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 0 0 444 0 0 0 0 0 0 278 0 500 500 0 0 0 389 278 0 0 722]
+/Encoding /WinAnsiEncoding
+/Subtype /Type1
+>>
+endobj
+935 0 obj
+<<
+/Type /FontDescriptor
+/FontName /IJYNWX+Times-Roman
+/FontBBox [ -9 -177 707 688]
+/Flags 131106
+/Ascent 688
+/CapHeight 662
+/Descent -177
+/ItalicAngle 0
+/StemV 111
+/MissingWidth 500
+/XHeight 460
+/CharSet (/I/N/comma/e/eight/exclam/five/four/l/n/nine/o/one/parenleft/parenright/period/s/seven/slash/space/t/three/two/underscore/w/zero)
+/FontFile3 936 0 R
+>>
+endobj
+936 0 obj
+<<
+/Filter /FlateDecode
+/Subtype /Type1C
+/Length 2388
+>>
+stream
+xeUkXg1$3H+7/VAV}hoD $HB@ jv[[Vj~>c|̜3{3cN0]Br=B?wM{y"}ua5\: `+*q)@$M.#
+]|JoD(VJc⅋L '023a,-!V)>|X|x2q0H*&$(RK }}|VKTJʅ`HE'0x2b.~?rJ>\%İN,ۃa+ lx'挽^6`b 07Qy1aNX
+68W8oFHB׳M49rzgDn\<PE{_OiV5&URd-(dKv
+I!<B୏`#,(rG^C7W<A 2hbܴᰤ'E~ & \wyL;=5˝ M*.d9Fӑ# b{T2'znl&B0ԣJ E)¤2[dl!ӑc +
+<PWQzdm 0腞xTKu%*4ysv Y@qYu_<jN
+Jo7Ir3~StXjmJsL5ѝW[eb6="f)ZF՜>PճFp:lƐZc<'Fo`; 08 WSjI6u_%UN֤֗vy灺P%'VAɽ;G7U~DUp4*l*iVEp *
+Jn&`.#8}lδa- Ո A ɲwǻ,-97Vc<(}_r`M63?a;w@2L堒wA"<U?̿<_doaR<,(yR&W7Է)Opmq4]tN>~x4# mR
+>{d<} WstDM m-nY6ݍӣ)w4,D^ )<
+9{`2Y5;K,%|nTҒ8dQRgjX'%⛒Z77Ol~V`;ټpJg{ћ9(_A1\nxSh{ʂ&5]ňxa ށvwEWhnH8> K8RjU0퇬?1+o3R3 fsa
+Ⱥ2m`6
+endstream
+endobj
+927 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [189.027 387.137 213.444 398.826]
+/A << /S /GoTo /D (subsection.3.1.4) >>
+>> endobj
+931 0 obj <<
+/D [929 0 R /XYZ 125.795 735.4 null]
+>> endobj
+310 0 obj <<
+/D [929 0 R /XYZ 72 443.967 null]
+>> endobj
+314 0 obj <<
+/D [929 0 R /XYZ 72 290.398 null]
+>> endobj
+928 0 obj <<
+/Font << /F31 424 0 R /F15 325 0 R /F20 331 0 R /F34 445 0 R >>
+/XObject << /Im36 916 0 R >>
+/ProcSet [ /PDF /Text ]
+>> endobj
+937 0 obj
+[762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7]
+endobj
+938 0 obj
+[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
+endobj
+939 0 obj
+[277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750]
+endobj
+940 0 obj
+[383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.5 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 606.9 511.1 575]
+endobj
+941 0 obj
+[562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.6]
+endobj
+942 0 obj
+[777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500]
+endobj
+943 0 obj
+[656.2 625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500]
+endobj
+944 0 obj
+[583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500]
+endobj
+945 0 obj
+[734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544]
+endobj
+946 0 obj
+[667.6 706.6 628.2 602.1 726.3 693.3 327.6 471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1]
+endobj
+947 0 obj <<
+/Length1 2090
+/Length2 16132
+/Length3 0
+/Length 17388
+/Filter /FlateDecode
+>>
+stream
+xڌsT  gζm۶yg&imMls&Լ`wV]u9*\Jbf01201YڙGGab tLP
+P<]
+7wpu>1kgsӏ{1{@ k3h92;X;KCGfi
+`gbb;=MJh/?G#⃆8cws?f֦
+}6PY=&v&ӏ_oWIq q:hI\h"aindjj%>Y;+]z
+TU\b|t~3<ۀۄm {ra)M(5$__&X6ac̢pGϺ&pfAIfZ°wWӜU~1Ӻ ƟDZx\WB`4W_bHw 0
+:%ڧ07/l,4ݱ&-}:t \!gmd1ƽfK
+lg_ W})o:JR7|2 x;s
+ uN0r2s06 M{pDzn0r7Nq|I˟qϞ ()$Z%I5:m\}+{u
+3yse^pHn`Pʥ8{H*s
+\/yFرKH h0V%$~+biZ2‹Ji^ *]p'Q 7i
+KslT3W۳Ub&e.QJq~6H͌{Qx(%nܤq"W_z')L*3TlPI'=X:I;&w|ϩ]AI֟*56 Ru"rfqkb'QPUjag&H`GBqQI0` v|Juu3N|RYZEAYPgԠs>adfuqXOW6H]<t-F>_
+qA׮\^=ͮГ7+ei l
+GI KTT/9$-U]mQ;c(X-XR\mc-уȷp콥z= 3mtÇ򉤦wLWtS>d* 58$dne<0idTt'
+eoǔQ M_]u_! |SKIizj{ .bSb:n-lh$^tN>ex2 <ZWn
+힬,I'lz]=a0al
+jKeGERJe?5!8Jxah!l>QtG|8X@@97iw+ OХ_kd{:6E D$\@(3+i!Vj5-::G?7jg>mM zEy!)i:@9B ױ2ט+9\ V\
+
+RW r+ʶB>~'g(h \5?̓=@
+'x{79-tj{hpq;i#y̷+|ft ŇtJ}e75]*\wP-
+FjNs̝  3u)n_ !"؆ۢH4]Ex˞ B6Y`yxyJa4~A
+_a?LԨkHb=N7_w}ɰΒi\ᬟ"fALac+=VCʉtLӖsc|f_ΥU/K[Փ>čp&ǒC9Z-$ASeEgzA`ĸ]mTõ7&&F!<k0Vn|z˩N>i / "btj[+>p!8<E"~vR5sjUiΦPy&1K
+T~i~K ֕Ex!Y:lUk)O-1R,S<JZ¸IrzYO9,oa4?Ŀ
+@Bdb wJ
+P)4LAoí~ 52$d/\? {,+E]XD9dsra;gR"ض^6IA_[0LG2
+Oaaq,|!P,Y3 #
+`+xsz]Ħ4Q??Oh??Ц%;<<Sa?`?
+L^>Wyc?N xjH22wWvKuܜV{$")!7Τj_b;X sUl|( fb&|9u0AYo88i1l݊!3XY%F޳$+76oxFuW=͐}B4+uڎ*)bsL
+a
+mn%.(U5Q/qYu> CNKo83_rv4"{s8ItlL^DR*pp6A,2s.6yӈbo?Oa]T)?aycEThikO=MMd[[PЍ}_c\o*H\}ە4|
+lLPy`GLZuQl+G>@ւ[LeF.w}1/Xąs3qoUȆBHdiU fif|Ʊ I,RMa>L:ZSK2Dqs &9UD9[(8PeKC08#`xmp4u,1֏in4x9C44i/ xz0¹i c辛 Ew.\i^4_8T|6_L4eaqF׫=I96PvdLxhU {C:
+*;!<ȟ|fD(W)Oi񹄼UQhy؟zEZVE&E7;ck uLjhym '4Νn3=vtZnʶRaBTF4۵սH4Q
+UVKJA[t9˩٘A6nA P4 .2" 8<[}s9A}L hn:3/@DO* O T"
+M7.m*a_wTzzsጺ96"v_&ӥvyS0&9U_E$L7U>B;Bqe8ƽX1Zo\h-v{PH2E
+A/Az7VX/Z:?%c[lY_N}6e*4$Ya0sFce.%K|o,oYw`0 ڤ۾k<u Sǭ4'%)gO 5Bq%9 .@ٟneʗ^)/[&{R[
+"\w(dp[H@ רOTea^&8l*H90JȒ7|׏f5x
+f0,BA9"}C2aj{T]/."HYoϖh)]*oŷ]%Ro\@cA9ő?~+dm)ƉvF0!'@TNDZZСWĤ.ay7pIe}MUSEl(-@QwaqP &b^T[L]s1^FE8ButZe[oqNayJ†xlRd"׵[~ Q$%Y8/l#͇L,G b綩Z\xKSg.f"hPUAnmЍ*HO3~)ɆHEFy%"2AbL&k,HݰCA!,<Y'
+.R:T1Yz&x3z1i< *Hz@(maŌE"=浜jiK&/tD/ZJYv .ʷ2
+m$\Á|0I<نHo=)ʴ֎Mfj@Pˠ<O
+ >qtBtf)lMP%IȐ^l5=֙ቜ -~
+}PQJV,Bܟ1gcЕ%7&L+ m<25G02H[3\>e]k(EзW T/~< qEK#hSwpzrkwc~Xc@xڥnhJü8rI>:mƷZl4QWR͸V}2*GS\'K\G&/Odΐʣ# vQ""ӻW
+~xVRZ?ӾD<Gu/⣝v+ϦB7@Ch@_(k<-g\Ӑ q8S~G<LTV
+r_ϯkVg[`w2VfTy@<9,&xć?%'BSi)ԛe%RTӼi<J"Q*24 *gSn
+6;8BePw'p>x*.ܐNІyO~37XX&gEY*A9Ģ %ݺA{3yCžU5A.SfDps &hmdЧaFܶVƹ)9%1Yu<|dYㅟ'r~
+ a Eg j
+A>$S/3ndՙڗx(L}aLRa2uFK&c,K Қ{b-UJ/!I>Fv ,n_:RN Zź7A]/w6xC9df =Y<wvt=VDs\=ك"V9!&O$杹
+0%UIX
+ wSw lB
+w&h_'] }ݶ ly*Sd1=:Dxi#o'?|H e?ӧfJ%%,^am e,*6^xع֔ZļUuWĞ)Z&XMmIv(տ*wŅkLmָ6齟{DCAb:3 y#w*605D4)?r
+Bmi6%.G'مdc'4]" S&%Qa o]
+^9t{vYwi7)nMQrٸ 3]wLkMBXpJq,ą[vVpq0aDkPj:%ċ$\
+s8O(&=)*ߛ ;\2N~4kUdⲋ.Mo?+<-SD(l9WC: W4;#0
+-Kyy
+?DQl%řx9q1ˇbU~C}?A/^G0w
+fhIȖ1)WÊ85o! k\32r[/ϑn&¦.a<i_ ׊D#~pzV@Ư>g%gJzN
+à womg$]}(۰ūi>nJ 3^8޷ݵzx@]/b&ċOV9*e/^Dg@'.[oDUТ9OI3^]cez
+4*x7q{َ(ьpԈžOHub #Uޚ҄w5FmXϊQ)̝ճ%2rnj.%TƞvEk{q3f O[ٞVmšLdwG,6͘6À
+`yyخSwUomewūPl5۾kZ#Y?T!}Ǽur3M^MK[8M.2M0O fd[ +s0mA+Dq)ii/mI,PS[.9Rw^{Z}k&\.[_MBPwcl#@J
+nU$y RfIF_6Uvx(PK>8 MLf +/qC J %RT aSӹh2tG\`,(r<nixlTsñt8Ur
+CN&xtع*R' zh請5t\.,'멶k`0ENØA#(u*]38LX.cvVBQV@)PszsZ[JuwiJAVRv'vrD$,5Cfo/) +vo#y1Ae$a aM`J<HY>N3+EDgϴ2
+%C^v-{'68NMLX95:MǓe|KUra70J %: "
+2+qTT!)/Fk=gݺ߭NBɳ^Uфvusx&4WUь=%IYa~$^T.Bb+-]._Oּ!yy1 y*镬Dݫ|gwܯB@X.Bi%hXӾN<)>>`*| <vRA9t3w?ڃ7 㘏š_:CJ˜-뤦EEA?z*h{_+`PUSJo8Rk_Y|dѪjcLYQ~@m ^Sfk/YQ#)NXЬMDypW8Mh$1I6”4.Igгv[6H}ɦ@3Hʌob1mYyJ#KCWlK :Tpiac'`|o_d@˒xN(!ӇOҲ3xѹ9_;"cFƫ1[{C
+3@=LSN#C)թga FwPݤ.ixpr2d=1DZEy8FXVfXS 7^ruƮJTd9݁DCVԗHKm|uL\͇ aX8z!eҰ=͎rYZ"-cPCҘ6tDSd>ʖcO=5>x_aF>[ 4Ept4%<B_O`%/<l`
+\K^&Vٿ X2&i() |ߟ'Y;ldB8tiWDWˍx zs4PᕗDP3]
+1HKJM,0 ^ 881#U/|a1z
+Gd(Ry8-봛@==&Jg1.O,C0lޕR&)w f
+vp[&G;2!ꙒZ
+Y"Fe}a* +kw"=޸
+P$Nz.5jA2_$j} z F6:r
+endstream
+endobj
+948 0 obj <<
+/Type /FontDescriptor
+/FontName /ZLTGNC+CMBX10
+/Flags 4
+/FontBBox [-56 -250 1164 750]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle 0
+/StemV 114
+/XHeight 444
+/CharSet (/A/B/C/E/F/G/H/I/L/M/N/O/P/S/T/U/a/b/c/colon/d/e/eight/endash/f/five/four/g/h/hyphen/i/l/m/n/nine/o/one/p/r/s/six/t/three/two/u/x/y)
+/FontFile 947 0 R
+>> endobj
+949 0 obj <<
+/Length1 2316
+/Length2 16973
+/Length3 0
+/Length 18324
+/Filter /FlateDecode
+>>
+stream
+xڌPk
+EwENP;wwps&3I׺׺\II$evbbcf+iXY9YYّ,l@#Qk-w
+509X
+2EٞEl$#o79 
+S[S,-@X,ߺaF(P\o1ݟov~7oW?V?ȱ'_2\oozv_8Y8ѿ7NvpxF?»-_gMޞo_ d0kg"hUzC+Θ/$:&64x45n-IdϞM!q-_ cU&wZ'Ek~ 3}5td,ugg^4;^i%K#;ʻrO%SLz~3pNL$Xgn72_dc"9=u٣g<V; uHF&{'yD6?sVw, o oMG(oR بf`eN="9*=yO9Y;+$|! kO'=ESC<qn' k|\{},6A<H b 3:z|W9 %g5R&ڣqh h {j}ڎsi.h2*Ŋ_ 3,FɮCt1c,2Hj" 0/!41Vvx+i/2%'A \*W(%$NK94r;CG&.;d*I(h q3P6(Stn,r_\+_Ϸjb{&664i5Nwwں90`EE.l 1nKۣT݋6f;1G{In6b~(:; 9[GO H-d7w)Mz44vvN#m3yӏ.ryl}wQ懚o!Ce>k\BXBD%#=%4R S-A,.g$O 8GFcvv'K)UE.VG' ]`HUߠm"D78c,BV=g3yTYVO+QC4d~]fUO,&IτEC*}zEc90 S)OTgq$˗|5*
+FY7(vNwe&SfOX&[=?*op9TG_l <zda)!b
++B+)MŽOAk%
+3~0(TZOd1 dKdkMܽKgp/>)Sz2*25ʻiGi PL).=_dm{L]<-Q)׬`Ϊg l 6yx*IRٛ i}lڊԧwuL<7͏:56eaX-ly,~
+EϷ=W"+k¢yƄW4ݭ+]д6~Nm(D`Ngu&VϹ%9j{_(:DYC/<Ք$DY G *Zc8$٘d,7$R4"$!:<WM8g~+ IZwSe/ȫ_YEDg zHcdIJCքQ~|p(
+`NIZqIoY߭Z;bR_~@.PqL9u&JI+$rkW7H{wOn[5߀ܔ\@>gJlĢ7>KPpY٨,I 4
+)j*bGjOdBM8K =,w\$<1ZANԭ׫15'v
+u
+ͨ?a-OO.ͤY
+Es!FaGɳQ7~;_{–~WaIv;?Sx(JHr8qD_t*@F8T (
+„֌5 2ɹ٪Y`vBtD0rV-;:q*ŖEׯVZ-Z
+D%+kg(ɏR!ECcLJPE8:xι)u/ÄnQ`?>#:4ĭIw,S>*olP8ӍİE ac>\`*"R$)4ȱޓa}NJ>`谵GV|=HٖB7|ʵ<wݛr|6My> ƠvZNՃ݇ҧ:]D߹
+
+d~dS|Un
+uOs>$gBR=}dY蓺An8[:=Wd́(Ǽ4:]@jsST}9C, ț!FqFi|d+7F,k#i7 ]6M[Ӥ!z (?Bħ[RJ̉XMGKȧqB>Q3T.@Xg%@0ʤDIA"Y6ćd5EC{zJJ-sRt,塞oNfa)/t6Ǻ/\a)9_ˆ{χM(`sHFx8?NѸ \W{5z^ Mzn'uҲdVPLZ9rfV Kx(Ip뎖`AԎƳUWvʖ!/ܫsO[;{BHF^MV3v릸m `h}hHZw oy 7b0MjWuX5Em%Geݤs^]2aqAb؏zIBs"u_c?]>OkW,@yHW?,J U_)͍nĸILNbp$ ҎvAX-66pvE~ߤkb8t_V6V \V{<SKGX CޝU5|ɏGYL4+vDxt5q<,x[#24l9|:tLX ]|))+a$ǵ|I5[ḇ7ч
+r( bgf?<0@h/ <z:9%fAa$7Vͪ@O#gC` ] V\\o#C6acaգX/?Vt}?wB4K t1d34e`
+oǰoR]X*A/p"WFssvX3d`O ~=(-xKG]2_<Wz>m)Jj;ߛ>E;%hp&^('lgc)@uHRq0sIWV^,7us?6
+In_}7O8uyeij^?ܷtR}ԧ!INuD LtE<n≉O 4}BZTP.c̥^FɵhMV=WghdJeQ;YЏx@i]2vz]TM Oy 1 5i:wܣA'd]JìY7&uW+:8!
+9DfzuMg' D$^/aNOf]-E 4!iC1
+IA3l(ltձsg%:8%p\omk\:Wwk]`QMK~UJ\}w=NhSov gt,/I, RǓU጑r.ξ~ݟ]$f3mR0-{JnVHsSi `Ei ey'*LOzqQ[b9L}]rG73n1ں!{voGeRYzI| 3ڐ4e9ױ@ƾ6Gf˟*VZO}UZoB;ᙔe;ˮz+sjv`g"y gMB(/2%
+bj}dډ^lA)w\Z[buˌ啕ǎׇe6~/7e[sԬ ECmIl;CZbpk}΄n*yE2Q7r"rjw8x=硄0}Fd2U ͺ -%[p4j!YJ(Gnd 7^#/yqcXc:Å@]׈/B"0`Eh* )Vq
+ӌ]Cl&b1,4*zMx$g`t)ѾOtPHpU
+
+1 j-s0;ZJW
+luʹS4Y4pn>֞5hG8c_0glz?fC~P-1AOxͧǨ>XWѽkmC^SFEj糰rN'>Y-ۭ `/6szelod7U'](-pkbH>UưLY9w?{"@>h>fwPhQrFqR)^%5sVdz+R繣"Qu~dvE~Ҏ"k1MS3daiL}H\ܛFBt0[EγSBTk1'Z8E>;޾ݬ&[pKF~TkZQMpv>H<"a͌Zѓ
++o( M,!5]JYz;.
+[
+ISZȦ ]z8scq{ҲFGPۗ֗^Lr.9Q|
+b&ek>C 4i<A}
+:ҍobTqˠ
+PO )
+|3.-V3cJ0嵫P?e+j̋yl]CU)765!R'’4EVf`v??#ի@A= 2[5yt r-'bzFn1:OG}LD7(V7X.a0k=n!s^GP=J1vM]bulr@[a_<6Gm
+{+J4\<콏" >C}rBw vB9] CnۧE膀oi?Z @1O$2F4 yG-=sK!HIFwrh_љ~shGP&,k|[`tXZ݄_?Q\:9F[}?G@`Bێ?w hz6ǰ2+{A&;oA#s.o_g{&W15r]0=]?S$]윋\7uf+E"ˁa=<,Jڵ-{@3ZJ:1m惫-s%} s(-:j?kuv)xrz1ǽQۍ=ӋjaFuLS&xm.hj36j+Sn4.s YCDf|P-cryŃ@>c^j6/+}"СC.^6jG*78xz,O\OM21ӕ (<9y`j{N*q 7?㕡{3m/BZcm)jrP(𜳖_p ШZz%<BƲE@
+aϥT`4`0ڜ9L"kܼUWT4%\0LNf;,K%uyGʺk\7s\,Iy:Bp3c|pShouˮ+c7R{cs3ץ9 ^My}{<vRdqrojzhꝓ6|T~%9ݣUEI-S2эRQ3uI^#!8˻ = n5*;gi:.U<*M~ڭzphy7(1eT:piATQ縈0l'd"h2}X ]lNõ
+%GNvUW
+uif\Վ!E?r #VqreA6qHU?Ӷq3"0\.X qi2
+g(D7L%A7L?5 }SI)1XO&/?
+= NGXg218S\u-cm@mƴhi!-+DwuvxY>):໨{ęn>qj$/qwgȥ\#PHf<U?p K2N@-LNI3Y&#:|]M\=`+? lth]g!Ym x-<l~N(iw"Y{Q^XcZ_Hު4 +mT L>, ~p1XM1MPs' YK?Pr};`3E4x[Vf]69q!Nsm(ZۥI +U҈{`ym]J(SS &s Bء^udU5'ctPoEi4O,q?@%YW\M^"D vZӮ9ĤAzeEf:W A
+}쳰q%-_GjD~ߓ=-׻2C
+tE V4xeVQd9
+G_,?ޠ70)o5(mU4[-%5fr~غ
+PweUfX6Vd{\;fQƳ)cva
+h<wn@ٞw@>6nH?샠[J$g!,FhῐD0VMyIS`TU=SP~CoqMB}[\gQcQ;rZTȭbȷ,>>+RG(EqB{3weRDsN 8S"s?K#8yt;]}Ǣga\<yQ9-1 e)Ċ:]溢b8 ^u[(4 ˞Ğ6 ;Ye̍Qg9lQ&#c)"u^\
+7sK""j;)'j
+v:w70 ۗ˱[/AX<ۂ2 &ޯw]NwIw?
+Fh#Ӟ>]KewO#ŵ4{b!Z(V.l\7ZpDs-@#Ƃav㟛 ?V<oovP
+YkUbJ~k;XO0>An`yZ9s<U "[("?7FS0 tV
+. HtR#cԒ$ ئ(q-=,=H'[<|8aۈ
+w$ٓ) ҏ Ϟ
+Ҍ{bvR.ܗ_3Ѻ"dPAt4Y+E:]dc5/JM'-xTf{K+t[>SK0hG ]P%^YОRg 3 ;*z|eҢg}~5Z_q[=~@!և_-R);#޼ٖyN2~wY{E ~";}E<+"[nE/DSևI0EV 3錢V0r_;Hz<qC"=d9A-MR[5
+`B.J%VŘ=kvbydoOkbVbUbs|̂KWdl<Ӷۼ {#(y&E`:oȽ+Ryq^ա ڐ((UXJMk&lA=A7܇p0fQEΐL<cľ*{h(/%a|9+ Lc◸ح.קRlhK[$fJDٵ- _}n8gKW-Q9!P%6
+&ZD $;n RA5\2!E֞J8MgρМI!A+rw'i[sPp! Y`t.Ĝ'_tB%֟0Ux~<~?ˬ?9_,oX^{
+U iq%
+t~m>=.UnLX"zAAƜWD4=MJSS|N'tfx֗OEiG}N^y僢V dEONdg1= <ϑUN.K`g#NW}nD$'z#]NqL`soD su%;M<y6_1fHyc'2@Bt\_.&niRoy0`JWbO)%-+2Cx<l&v5VisNuSYsM۱x`ɕݩlަYAŧckؗ|/w_.k|N=9KCwO50a7Qu˄1 /4h5y
+xP)XS
+SHlXH>V}\A=;C5 Lz3O9 ԵF^0ٝQyz
+1`2\ޤ ]!4˫M"uBuwT<lmH2Դ<ڲ:/d_TQ_"v,W* 4nSm2HHd/|7 gѽ
+W`޿
+«8E|O퉛9HdedlK*> wRt:K==LO ~|#|hRO_#<N؍#%IU߹[8n9G&h+=q]{V
+XmE9k_Owo ѯ(|>Rcr9r #!N()H`I[ِV`ZR6\׌,X_@#jʚT`HIO%Qnӂp# 3cٲeݺAQLә&ODiz1 jSv *nN&<kE*Ey?J|7Uq͔y/:/{F*F/40zSF7+vE5!yNS59
+vZt𲛸>;K^9@ʘ( aqYjV+NXPwm֛CM>_KT_ g28/EV_Q W1[`ۘ8e\O|y#Ub9a=2 Α.V>+? 7a]+C5X݋PheXaOesijb*:%Lk*
+ 0U
+C gOībInq=}͊U
+<WX%sx8ZxC
+ *79Jf,7gmsjJNפ釨PRtScCyc@hgU(};*S0N#{I?K-$܃+OByu|NQ[jq%?TFC5]& ̓Mv\ďb[1
+endstream
+endobj
+950 0 obj <<
+/Type /FontDescriptor
+/FontName /GVPGVG+CMBX12
+/Flags 4
+/FontBBox [-53 -251 1139 750]
+/Ascent 694
+/CapHeight 686
+/Descent -194
+/ItalicAngle 0
+/StemV 109
+/XHeight 444
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/a/b/c/colon/comma/d/e/eight/f/ff/fi/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/period/r/s/seven/six/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 949 0 R
+>> endobj
+951 0 obj <<
+/Length1 1489
+/Length2 6816
+/Length3 0
+/Length 7812
+/Filter /FlateDecode
+>>
+stream
+xڍwT}?Rf;Ar& ҍtA7"!) HK~~sw^{~ce|#g(ah/P@^
+t~Ah]!  p{ `.P[ y 
+.`
+QDS"!s3\gdag=)sB@QQ!
+<3ϿNo?GF5=/j?Kh1
+GP_d{.Pu`avs03Fa{dfهnk'`$EF0ky
+i#; l٤뤢mޘ5)na 8pC,۟uo&sT덛x'F;Xv܊3i ]]Bf}1w#tyMKŒ}Ynm0trY^
+pswG ,+_$ n# 1~ feTE9&_p`$Y>1围GɶgUت^\Oww֔yXl(뽝ul}s״O2j篝8u_V| %1dQ@l~ѥ%bS6c&*zV"3LĊMom:I6fC`{,p4!֙/RO<KF_|45>rVp a4Ќok/0$krnJ^DgGC}-
+`O.0|$P7p_[bC_d7I2+rw4bwi'fmhq߃\F娥+Y$ Dvj, -]쟨(]6Q%Oq|
+t^8 ~NO'L@|8%7ѳyy&g0MWcbsJ:<S1wTT̽.ߑ?Qr2E S4/DŽ5|W}g7B*gf; [7j&/0d--#Y'_73ҷks&'cI A. ol27Zv(G8rgNXAHnI m~PXyj*~hKjxz٣]BQ
+ߡUo =#R\Y BWoe༖|^I۶=r'Ͷ*Ya{)Stof7]!X
+3BQ~:19.->w򘻡$G`EQeѷ7?/n|#Lj4`T:YӢjlgΓK@ux
+EMķКᢣߑ6KnISЄ:y؅R5-=xѳ$J6zH/*txY|e&c鹰A쪨LLȗuE7X tfώgoX1'DS}=8ԬwA`_p/-zI_NmK. >|PT8Izؓ8kSaOuꇮlpvyR(u:!7&`œX'=_i7oی(wW%ך/n\!ﴳ ,
+<_*gcj-4U(J&9[m*"QHt@WMX$Fb 5`Eca0ݽBF׋i9cnJNt_*[MRܐ:\odd״4a"*\;cڷ8ن D^? gN[mwIy'pmEcIg>]S:'/:v, Htiܫ4jzK>}L|S5W{F._<5Ӥ.OE?j6
+MtuQs®F&Wa|GKC-Fes{ j{?/ :Ycf¿%PME@7ls-\斞+w-7#)ba"`T/Ê&
+eIZLcL;{gGy.>d" x$INj.D<~VkѠ2(+ 噅ۼR7etwܟZ{<U8c!l+l;L8S\?
+;nr%@xJ7aUdy8Ph\Tϝ(zyYlPJ吕5ظQ+ȱm;<
+=A;W .zzMٮ,)@Vns 'JZ}7&
+%p(<˖~tY,]Ґp s5 hݗ[D3IһJꗼy(1+FSZ,ZO0*]t'^_ֵn`}ϼω!2:$|#D9
+IHCUэ7AsĒ@ŬaP
+l uIWݛlG԰M1d K:!RuKRHPC{a.;؁y3/:9 >ǩm bf*).h4`x-O[ڼ er1_KEwec}7;V́u=ߘP.Ϗh\
+endstream
+endobj
+952 0 obj <<
+/Type /FontDescriptor
+/FontName /WBWHMG+CMMI10
+/Flags 4
+/FontBBox [-32 -250 1048 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 72
+/XHeight 431
+/CharSet (/O/c/g/l/n/o)
+/FontFile 951 0 R
+>> endobj
+953 0 obj <<
+/Length1 2639
+/Length2 23058
+/Length3 0
+/Length 24549
+/Filter /FlateDecode
+>>
+stream
+xڌP\ Np-; !' =[|^սEUkzNS*1;%]YXxb
+,
+gu[RNp qp#\YR*_"v+)2Ip2%3;D៣MTPf& fFF|y#R[#&;&RF U@93y<7/=Gx\<FrҝL3)R-§5A`"┱_1+K\+w!뫪҄SFB%_P`#px[FAJmnuse㋆:i;O\?3bJ--JnziF2-9U絕?"Y6JdtXFcݼ6pz
+
+ R}kzve-^Q`mKKɺe+PZqPj+x MZ% K)g0~x*5 GQZz8̐*)2.8ʘr?g$lŎ/l6內1eT5ٯ[JLW;^@?`V2
+PŽ}ɷ6>BI)sӚy⠓,}Ma2'9l5blil-+2MˣHKRFM8TXqF
+G ΆNscxwgzĠ]8!F)G*HqP[P%,ZlryJ*_+)ň&~X͡:[^Z a a}a^v7Cx;%"?tգy{ͅUĵ$QdI#Wm= Rwǵ"YC#K%%-vsCٖB0\㔨[=LB'2ZmNߺOC,dۈ1uj֕ڕlgZP%CkWA΁hxZg6
+ݮ3BSDy>R`7鈕> |6)Wu/h66@q1J:
+DZx:+0 xPsoExU]sÖ>LkxO lu33YD%M
+AcR}M$<\TOvxnCmﴊ"{UE TEMl;=j.dp*VBm쟭`GbĴ|(lٷMntv,NE?X;L#Qx2"WapiIRx)~5]王"4<}J'!hulCK̄zLXhc"9Ѱ .`oC*Ie|`ҡmc|(~i·І+h>X5<j$[](j#L a1Iԩ/2Q2/ʋ&j8?!_}? 9*FIG PcCd/MQXN#n19*rqk=#|h{VM"S7ug*9\5|;zzn`05
+:Rs|<PфPS8:`ؑ!œ kS4=AC6a9;XNX)L݂˓>U,QT,ZLJz74
+Ș ISB%AbdHhV]zz^cfz\@N(beHI;)!*NA+?Pp%xyWؤ[m?@i36@*~$
+74CbwV3~!~[-MM*9l
+P
+dW _=]~ksO'o4][J_}mW
+]0*|'ly? -Xz(u&Oq F<c9"I鯨.[})f)8|Od -`1I8ٍ zLm[ut' .w"vXmyzÆJ)WN#4؇%ւ(.Q/ѣYÍ~ :[XXQ=+</N7KqB8?)b Av-^6u~2H76zٜV5r (₆tXǀIbR7b=7[
+v#֫.WlMn9ؠ I~ (J&SDӬNJ"K|Cc;νU's.AD^_:kU%`'
+
+
+s{4e H0)CDDoH䩕ݨFw"JP!WFA,i%*hS1}P֜#?@N3?V5VbH_Ji\P ?{ey'C˺kPISH{۔{d2& p|ees﹢/{Jf]'02{ą4?w# O'
+78(N35pߓP8xr&O7!OÂk.B%s3B{ pn~äҰX+WszDXVo-{#
+iI7N#JD!y"-. B#K1r\Ho`OL u+q?#c 3Hxȝ=lA&, ,CٽF2]뾏gf-pbQ2̮eKW/s%~p٘;ki/> mTUؓzGݪHyvՌY~>JSbRV\}|.|R9#%2ϲ;~߬cٰX)v>{1&ґ[(`&x{#ӛQ)\D֦~{*=iugΟUVvNXT]nŠ4m;^*R`+ ſTDe9:e&J}{RJs,J.d~L3 D忖j`QR1yi 9Z3A@M3B+82;
+-1?-]e)O3g;C Hasv7DOuG4CXC'XRHBM [!߽ew-<_0 9 t>LqUfd6N?Y~]3,U$ ٽW #LG/W
+t.1/'R:W .Jhlmi{adi6cENmv=kW4Aܺ0
+1e'0P6XхԌY(aْs|!: M㿮RTJ,DVrxlKe\bA
+KHGY5NJ^RD0v]KȖXnXVF۝ Ѫ-$S c]^{4}K^XxN5Ӷ'*?FW~v(7L!9t7ƆܳM
+?[Q\l8hShA/C`)E(Diu%! _Rʣ>])YurjH݈?t`1e,&]~d*imUNć
+wM\̈1 ۤ|vZm)[ .cWuUMa˸MMgɤ~E[cI͆Tk'Wlﴦ{֝T\S(P<[.õ3]$>ʕ{]$ތA-}$ħA ra4m艑;L?T"cͦve,Wj/:B.~I,ܝws
+ٴף M|yNaܲ5\68ڵ:kfQ/FVSn|f+"KR Ef7Ρt׏T3?ߏjKzO1{ zt Kє4v͊Fư}X'eizHjl^펌h  /'E.60kZڵܶVaqkfyz
+p#)u'뺏!Bܸ^ZZG}7J\^٭uãBj/ը1唨Xɲ?Eef!JhJ17+&O4v;ǕfAuLc~ߴUȿiu=q4$5ځT*By6>õySd&ͧ&6dT7Y,<NY),3m~e r805υKZ![aGEQ5I*PG!/* ԇγ`R0"EJa 7/hɏE/vڃe#zQ6=:+%ܶJ֟T.}m Ůf*z]X*~,(8E "߰vsLe#p4L m9gD4RN38-aZ^D% {!K7+7ꘞ/PxYirV(5:H&C>mvaJXl'B KДbڿCwrʚ,"s>d8e|>`Ųێ z`"9w*;Apq<LW Umݯ1Vʛ Y,S̙O(M]Wn%2b@6*VbpՅXo3XoJ2!eAq-&MW)bҹ r\ԷR4PK1|2'+L4W^54 T|Sܗ@\mvt$Q?<8#Z
+cIgj.{$ PBNC^QW>T3c+6
+98vYxw<줨w#G/ 5Ѱ
+v-?
+u4>QR=RRP]<E^lܚeK(IlSX(.H V9ssC ̜ީk=&xNj[2"I=RPNBו(*
+}k#<uCԐ$d#K` k uፍ) /?2̔ Ka%D&x'x7>F wF8㬝@h^ACNFs#>dSݡW2{aFEHMnaF]Ϗ7FTiH<+'򘺏 I/0]bҖbf;W{H zzZmHx,cu}pc/S˰!_
+ϴ|{S屈{PDI yS<m+g:{~N1;kaQӋ'X\+e2WˈJ /.W J>·qSf]GۗCz>)\Gmx)b&>Ͻ/ݵk/Wv^ I/4
+pDy
+|7a|ڌ_<Qa:rKNqؽ-gIW{_ky- rVPZ^__K.!H
+*07y'BT /F`DX+W
+00u3HۉK !MlʮPh]6O׿jkM!"ȡZn7fwXc-'ɼ<&Z]fD;Cm;K V^}6/ɋ  / ~*=5-b7OgkU6EqK0;S11gH\[0a_33̆`߃Aj7MD5= - m-C(
+V {DQnZ{y7V_ψ;2eh7NؘjJޯϾm@,)Nkd<%8  xuß`@ѴQ
+1[^)V8J0r/74QCWD3s+`T+q^3/k`;9$:7ζY+oxWx@jBN7У\=6dfaTg4Ky-:1/S? / J Ѕg$0?5KwAoؒr~VOU9 bAH8 !*xM/Uwg@T^bE&-F~7/0[VלԺ*8Ǝ!fm4 !5|4-C7w_f0M&hg2Mً
+$ww#գ7/T*\S;͓ ejPr,ZIs9R5a+8;R^m7]H VJ|ƣAb ˴V
+?PܲI;Ԓ-,xݔR~k,_;_Uf! SĵցF" 5`5O[HVip% G}I}V
+_;yϟ? [ wn9P_IJ^ KM+\B$1XZЀ k,]a-56b$!dP
+0D CANX
+6mp+>o/H\BjY:*4N4t| 6Ř9極[|_`U_.Pgy@"3.t2K sY`r&+ O`}F٨m5+B1<gQqR|iCOA顣8rLKv !{B9Σ"uyQq5ݔջI SEܑD.`s>\SBUto:wQZsH [Ѷ*4`M|nR,R&<xsJ8br7$|!m8 ?r'#)jm ώOlM`ԥk8eQ{n"]k2(Ռ539])wHMUo|Ct N
+ɊީDo} D7M/L=kD8e6<e/f\Or2xO*M~5)\s 9C% O?5ŵ(@.y;ۧƘQhGna,&swV:S|n/p%v&ã/]]VTTaS瀷AB0wai8'cۓuY&y_PбzW6Vod 0ށ-U%k V}2v cZ1D&-{oq $s$
+fi@9\FmnJ>`h9 G,odoK3VIyF^F1X,s%Αc) Qqr4 /Bz,߄+g{8%V_$Oח+ۊcFҢn Z銦;Ld@/ ֋=:1׋5^+c< wW"!^oULJ-S4Mۛ|?bZC$9d I3h0`AzlF~h*rbL4!M2.u1v#a k#zUàku˶*LtOΰ
+b,㞷_&]p\.Mi"m[#n Ņ[@2ZOy
+ϴ:+roV%m&:WrZ2 !IHa1L:)/ݲ3>:xc,:c
+X))$ T#:G2-4RuD߇O+HkHX EMF6J_3$6Ӷw~~v"CJiശg6\:[YyhT3 <{~%7ר#RR0Fx/Jc43|g˭I:OD-ժ:2ؗUF.s:|`
+Us/d`iZO({/K#Y_;\ߣ̡@C,
+Vݡ~=O|2oGcipܡu9ȍW(
+$5[;ŘAM_- `>"@vxv^{1Fsb7yVr Nc6͉Xvec:&-`FY,VAJ0D?-lȂy7~ٛ&X{aЁ5AmKF5c֥Ѯ`C<?dدv!o }jI^vF/ K4]vsqU}A
+yP-%qw)_
+
+٣\Z 6$IR %] r%Zxz
+Co? [o@q;&MI+/u/KyR>Q!#l$6W{c V. >?2rQO>p%4|գ 5 )\k5V6$0.ai",X
+b *M
+=f5lPkQ֚,v8 bsN@/ ,._riYU @`XE.";@UkK
+\BflU/)culf@4ԉV[IHS!KTn,] yr Z:Ц",+?>ۣHgHxZʳ}Y,KjBǐpoX}c g!ۏiʕta䉌1| \CO IIW
+]\¼[ jJW^e^ 6_!n졸"V\9ĢWv#e[CuG:@Y0e=j$AbUiV;[Ck$Z6x%|ysW{]Ā]mɳDs`#2l)~sM<4mXkԓ܃G'jRBߨhN
+0?z8oQ{[`0k9 '^{;yŻF캠Mnݢk
+aϷiWu2)gu)9zWԱhO̸oу
+|v;)9#ӹ5Tr}gEñ
+IzǶ"afakCNtl%/Y#CGxH+J|yX>|SXp=*7tdsq!sq=IKpɚNJUZQ]ϺASU YDg;Ho-ل)ӝey1E`jaZ3LFWʻ{(ٖT#\
+Z;T
+ʈ^u<<{5
+pZex .;i SXwq9<s*Z !CIQp4c_xuܛݰzx>;`'0/mFܽVzc%w42Z$۪
+DKyRQq#m* f=7wO[2T7)6czSjM%M09}[\/tRCoB[Hs,#>dw4uͻbkJ-pMMyD>G%/e9Zf%^.r\\SC4Hm*sJ1aiGYDo7>i{CϐQx3(ꨖz(kecyQ"RwGs- b
+em'+ũ`K tS,OTג#2pf~P}^(5FAHO++NEi2Я"aR
+q1)3 SXL.ZtsN5g0frm:
+cX@Ѕbj4m %* H jTV'{K~)8J7Q.װ hkYQF]A2Ֆd$Du_|W=`XRmEzp=7LP3(93[$V 07BfnU{&n;VhWk5}ӆCp2Y~՛WCLo9rã!M(}?Y/y£=LgmrO{Ur(;A+/ڥfTosΨT ;$)~Լ68|%k=7>úd PBPO̵Sg  GeY=L逺pt1e}tO.Ƭ
+\:<ư "-_vW
+\JndDt0#f%|cҚI@Z,A# X9U*$ l@Y0{U2Aƿ4{?7XC(U&n@!Wu/н
+s`1,_E!)tZP.w5/"C*7aEq;\OՁYR1'ܘP.iA`wmzzOxC:*֩X4xz
+iQNke=M%&UMX3tU#nƞd.]20n]a{aSǓ345E1]Æ.imQj(Pxe4 oIP}?ǵBYp] |2!7=b8cP-qGs?Q*L,*Q3+yoXZl9]>@AI~lbilhk.:e3Zc"S$[d=)amz`ಊL,bȊ92y_cYD6^s7@!vs%*71"1C:Bےø򷡍ʃEO`ՠDK=TBrFASЮ c_Ц-
+&DIh$8&Z}Y%Y-"؟m; UcY4i¢Z%lWkGA5XO0pWgp7cT;/ ׬8.? Xɂ\#it]ew ] q`hD/(Z'4 6V!8'/#fʗjChx8-Tx "*-$ QqmdGs7X~7D'.vNo"!.=XOT_q $]xIJ
+El7GcqȽhuγqƴ3NّwLTQ,Jwߧ^EgOxm=:IU/U]ǿG댵+P>8hNLxBejR$|NaC\})Vg(M5Yf/s3s_SKk^^orRi3 \
+ V5\YF~eIK3/ojY?eM
+Rں\)X#-ZqKBCT2P(oqOmg~$}`up{kUݣER'ZPlA @7S[2<uzV9r}]rRɾϊNȑ8ES iOt&]l{K߄ e2Gl>5hJXd5x#T8̳{޼T0&H|!8oCR)"{D #VZE>@6
+ʱNDŽifX_Fa5IޔXiv
+l x.O$|s^+Q
+A13m48[6WLwS2([=ҾvfG~ vIOƟ_`'ASNUXF*)2HO@:$-af'`]'|25^_3\u:OFL[Ơ697QI֘j:{BRF{`tS$ʸA%仲 W\tUL([TR7VCh$W^dDbӛ"ӪoPh&0:wJbp}@aY)t)\UMBu ?ne3J̹qJb'xikXe*S .v <FApHUl>;dYt&:>g`T1(BZ08Cݱk%gh 饬[Sw\ S-9MﭐOKe[Mx7 xd-*\}.1}/~\_9m>,1<`QۧGz<2Q5Xoi{** lx<&!_BnV2ގ U32!le1QϿo(8XujS=ZŨ8kISl*:2JJoGŨ_ߞjA.M*uvk*עdaNLRKa"7x0jkgMnET2h׃ A[GxuƠw@ k+a ,-%FxDUg唵2=W t]JAkla s,/l
+@1ݒp}9`=-aH=F[uv)P""{1uyoSvPB]W#S-DR(s=/.o(:ݙsg ``l sɉEӄtI (phV+(=Zyg;Ns p˦3mϏv^~.Z<hbˆi
+ ОS1%}qe,YBi v7&Jy!f&"/$֗Yʸ:a XXWd -Ǒj0;VP>' 99eSt LHgkӨ\ 9կTڴ6j<!Xh,;|9)bwPRܟDFhҢhr C s8KY,jOw[˹[PA5_^/E ( i:8R+؝x7}~s
+endstream
+endobj
+954 0 obj <<
+/Type /FontDescriptor
+/FontName /LJRBTA+CMR10
+/Flags 4
+/FontBBox [-40 -250 1009 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/X/Z/a/b/c/colon/comma/d/e/eight/endash/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/period/plus/q/question/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero)
+/FontFile 953 0 R
+>> endobj
+955 0 obj <<
+/Length1 1590
+/Length2 8368
+/Length3 0
+/Length 9400
+/Filter /FlateDecode
+>>
+stream
+xڍT.(^!Nq/  HV\k)CqJA
+hgkVo>> :VN`'7'P 
+q+@=@nqjNP- -(x@:D
+ <QVh8k6
+
+ Tư
+xTV9=C n
+^e7vHCm#U҄Y)cy
+
+[
+? F\ҿL 7Ko$(cHX__c%?1// |u
+1'n3tKjretE\3p&3hEvdkXyTg*cՁ2i{gʑ11X|-5_ q}.p+
+y,]jNVA+o&搙I
+[r(ɦt,nt5R8sӥU%[<q_{wf.۾m SL$5ڍ_—I" n)v,<}k=b@ƕDJ^Lt>Kާ~tYTzQ}?PcI/SNZ[me LiR'ݔXNJ7hmhIu(+D{%iŪ-|![$ L&kH`lE.}VoA(hiRE%6zO
+9B"eϻ ~I3}ԑzo,ǫ֊pFf6lPy?'P{]dm:th18UR3v0v?_fQ%ex,j
+7䍦ˤ )_DgFݗ2`=dH aJ= }cNG1ϛer01n^'f OqOJ$=ش)p:?y{F.7Ͷ:1:/6qKMVѥjC+hT%[
+i1o U )q%7k/*wUN(YCbB >DhQ8!:Xi+Q(~_$t;'k6j^JA?3Hj Q]x*P*AmYvuB'oq~#!;|%EB,7Z9_g<IF1k88_K\C
+N ֛a/5JD҉6@besUQ~bGh3 Rn.1#$ 5Ԇ; ˆ/iJ𞦥$>c˺[uH0 :gJ#;̻lnϪ\$W_{øYPZU*]ux gkdcSNΥ[ g9ZiC^UVhNwdlYB('4 g6+;E'I^oF
+LZO+cvNi_Y@ERG?KOl*[09^O CC.j8uS1.#H+"3>N=c3MI*o%35YN}i8>QpYT?2g^!X ;=ۯ аP̪0-ȟNf@cRvtkR;N.NQi{ц[vjc"dDf5uo T Y'YW#aJ%hL%dxE4_I@yOʹ*F]ކke&>sRsMo&8T` JJj.jni=jM7^V_z
+fX dMݿZaeɻq2,*VӴ 瀾Mدv{dBX5`82 .KK"dՐGOӵ#[qn0cA!w<z6ܢcQ$ !7KY/*!/"U0Yȫ RGqq Wշ_X0[񲰚jVrU >PhЍ}!28
+= <Î1wa b
+x m
+=; qvVgӏ'.Yhl(WR.!}j؂%m Yʶ55S;p+UfόFEV.XឬנSw D=&TFaƵuumjۏYX$J8eW8_#?Bk#_ٙ+BF]%'sWM/rNyM{T^uWg™Pxq)Pcڈ%լ}瓾+R'džx*AjGhwޗ !e9ҼWqepPA(z~gelzT I񅈨*
+h]~b S($ V-uNMzop&pFi\wlݱ-}ejkֵPDhcUb9Up54`wX`*wHhm%>[L0
+B]qs_: nIvusPu1sB5+k͏g" }b|2eDzaEe%aA"Mm.IX=kwlAY`5O[39*-ʧs5U3c]Y-m._;[{
+cc :Iś⅌ "@+xRT+:`7[Ih>J.;9KzٟxH:ԟe7/?UtWQe:D?#7('5gsxf1/ sGu{]2"QQv.Hvk\#_%=SA(` b\qTbxU0֍tw3AgŪ%*2+l׷Ŏ!q,[pMR:kx Vu=f!l~F#TDssB2Os5Y1
+IGxv fer}<SXMƴ66V(ׅsƇ: ,ǝ;cg/58G-^3 ?p5N3ɲx4:g<G_IKT6,Eqȏ 'wY,,
+Yh/z JCuS_ixOoeDBa7q+Mz\
+nZ0tfE$$#C)WCo>IJ.UȝoxuW硼r3Ԍ\(W;kZDSyXb>(f k;ͪ \FETՠII܈ƓwWOV3Fۺ_"0vRK#? a|\*fC^ԩg>aO(cٞ'oR.o*Eg&].5r+._+yEo׭AtMs։A蕭+pF[hO"GIzkrҙߛ?'HgK)CLVȴ}&ŭXnlW",d4ĪJLاiq
+=1UhkYŪjtꐆ?" R/inI󰩇X<@P@L2>-4m,GAqƖ(؏ŮN~wDlh!l|_ʈVQr>|f#=^LjTJx"mI)Km}5
+}C^.mO&rZsN9zDx!qps,נXȗ:QVoYY'VqUZ9>`VKd->Y1"#7m\ 5=[vRY4jBw,Fe]W \-::-߁B%bmLmT ?Z1;*b޵<L`. hf[UZ H~J)1r:qt.}xLTZ#Z#:LW{̠N;I2OR\edү/0>\Vr\w*`g/)HևUaKsO_ O3`*=`ṣaD w9w$5
+A| s:oy8}f<ujRV7ܷB<ZyHqu5;|lEbͧ.S dxq.+4tcox)%TX,fNyOnHrtzecS@r>C;;vUy9eJ7jwѷ{^:IcX%Wj8_ ''/`Dfbo>q[BbI/@VfAl:PBhPINrcʯMȤ=~?s;}otM˫u{{?8 ??. :mk*`EOKY#!hlץO6AX/ &4zExA'򜤗|(KoBq&٨,^
+pgȖa7찄bUu,~ʶ>URզ|D%lR(&)^CP9JeC.3 HFҮAtf aKiWG, aeκ/7^Wɢ=9OE̹+.?El"մ$g]gyޭ!t
+Pb@OÛÔߏ"cKh}>~,OUssc49K&_CY%m{?Ml/02uk=+uLmE޲۫<T)ǿ[ߧ|/Z$YLm/5ᑾ$jԌ+bP̮oAIN^181kޡ 1u臥PYsn^ A-ȄS+YWL'{|]h;u'}li9ؚ#3
+endstream
+endobj
+956 0 obj <<
+/Type /FontDescriptor
+/FontName /TCMCSC+CMR12
+/Flags 4
+/FontBBox [-34 -251 988 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle 0
+/StemV 65
+/XHeight 431
+/CharSet (/A/G/T/U/a/d/e/h/i/n/o/r/s/t/u)
+/FontFile 955 0 R
+>> endobj
+957 0 obj <<
+/Length1 1619
+/Length2 9033
+/Length3 0
+/Length 10079
+/Filter /FlateDecode
+>>
+stream
+xڍP\-@kݝ]!;AKNxLfUUW>ӽ^߮CI(j1JA.L,|
+M!`O
+` \<\
+
+xQT(B^f?'Yhr_tFhr1SB9v 0P 0em_痳C,;6N.'2ˋ89ެ/jl
+mʃ}+QW46[%X:AA`4eY  #"֩V3\=ouw3^+elΝzxDWX#Tb{p缋 1r2 #Hivzm$ף<amû7^Rⵈѻڡ]oa0;|ng\&p@fh#,MQ:%A*epPj?ʕt}2%$ՒJ*w;JznI1yk >~t RZŊ20szmgI5*u6o|ly3epp⮼˟E#nnB|Ҟٿܻشl]#u6/%3{ˮ60I1}%BPQqmY}F
+~Ԭρ zy"̷ofeƚf+Wyh`O?q }n.M,nKvEcDqIg *F1qV)e! jêIOËujبs]q3ҢmqyZ݋u5W]H}Ǭ&y1t=9SN;"XaP
+oZNph\lQUMБ,q-F M*yl\;,(%>Kg-Zqj_1N/[p H/N
+` }_,[It\-eˏzF9(Sg{C'ء`HR"}bYc&$y{g1W':et1*X qKI4Ym=:lP1l5|rkW >Q_fFN&U<۳*nD3 inS cv}~x=]h6
+`y
+Op-Y7^mI԰ytqPZxPj}P~ݷ,Xal6[鬡h-Oljh- vҫh_yMYM:cji"_fP`3 y՛q/d=QŇg
+sԌ- BPjUH RW LpUYTY/#{ds7im߸gI
+*릚ŘkT5AJ%#,̓5BXݪ{R4Y9`5nlK;eȼD~'YJY~6807͘<K7wzW5+WeNwA{$dԇF=:]Le0.{ц3]=`'7Qt3
+
+4|t}1,?個 A]J_t욯u=3׋K1n-U & `kP?}')/uyuHS:Y?Yr2|D"WN q*FY<KY4]W k%.ų
+G[D3)EKg%dE=3O~R(Oe Ӝ73lIB#OX\5W0GXBZ2 j?%jMvZ,+$6 ьk'L扖ekJg+EH-?) |6&2ןqC3wՉYImG7G[OSl5kEI@lG+ZRM&6Ű.𼊽SiH\Ff8;=bO; =Hx2Iyqug2@O6c ?אL\g]{aih^?|Y ILn;JmVbQx9zKXDZޙddi~m1a-UW?xC^yfpB&Eyk7  PWMdA6/}j՜Uv5^? ހLnoBkZBO X8M'i&`@0bhL'RH<H]2}-Hp15節mW=9vmLr pu<4GZnࠟ@8C4J4PY.M u ]U@e~I
+>]w<.brf$a#Ym@İ|Bgm+#omz!½NX<Dc)f:Z.˥RFp]Ӻj $Qt@bޕO+
+됥vqVs_`TR!J#SMŊ^Dn&;EGHabט4suO)oIWQ7;U.F^YI4 T^-{,D ~U y@8%C:` RP[g.,
+GcZ; EqIXcxʟaӺ+Pkw UxͰY_1j,؍T5j:՟W!k9+Dg$GGu/m
+dQot7nsS6?E*?UŊՔc}#݁UlļJ659'
+ݺE5~}QI]3v%LJc_LV!Z\89&TPVuEWENYf毻Zp%*QmF9P>=
++{1hSd D,w 9
+& ._pDퟄ`Ȣ57{_~@>9*>ղu+[m/YgfO-FN^&蟈>#uw'ި=!fcV_ijF̾Of'[bdv\˪
+VaYq%|;Oh1><%[dpѠky߈ 0roVLvL6m7Gp@ J̘"~f 9-v}vȵK4o;&ڤJJi>P~<#&5y<=k|TfE^`DVfL/LEW{D O4 ،k}#Ρ>ϵ
+'ֲ{eNkL̯9
+v=py:.iԲ |CܧpW<Z G<iC93̱FSu=6߁WEmԬ
+
+~%IN^N.%|v4%g8;ĉ04ɬV 9mͳXq2,p,CX[Y&C/%1ɤJd)Y3fZ/ I(HrW=K>K
+F[Y h~T?ɧI \  `ˌG$J@qxL{PfKX"R5Ci|~|D+A1Nl㳦fy:e93ifRAޖZXح7NH;ZB|::X=j/p>!ة<q1hXZr 5k-=3pWdjX"Yw+2AO4~;<:չ$NҼ_q [. &צW.:¯2 LT>p>aD?/CY_ҙS.")Ƥd~|70@s`Y!U=}X7:l5T5M)Bthdn&l]4k=
+gjD漼U3sBa/6 iQbR*)7MNeӺ
+GylSsD1F wxQ'ڕ}$I/ƒ>Ui
+sV|,0 ކů*1/FL|еpxRԈfr_%?5 ,F,_" ~Z{ Nη;;57/Z?b{0'lȒj1ے?e/V6>} KYF8oŞTvh;!}Эk |]T,9fTMv @G̮Gx ˋ^]"<aC fk03[Wۥ̊Wdj!4|Ey v#gZ #]{8GƇ,.jWuy䒡;sgTKoR@P՞;ZQ'S  b[gnJma`Ԥo=%^ z=T[&vzVհ(Jib &<5Q<*}99Z0)6J) jՕU ֫B%xԔ4Gn⭶&3̞RA~daodG?4ɔwNx@$F>Rk§n򢴘9uYA>vG#O
+7b‡Ą\RRkBg9#'6O&VdQ̀yGtsCҝ3qt^Ɠ6v%y^20U\*|8(D;^6컟I0 Xkf(BS_N5hCJ;<kTNuťx<l2)JR^mMr)ʍ=u|$"C$
+I"z S.ĥ"%)
+?;M_kT,TJMsjqM8˯d4
+m w ܵ1+RyJ-?KPhH}NCBa3^H.RIa5FCQ +<(~45 ŰYwE;U@.etu_#`Hk7Px !I?EG[Vlsa?-oMYaPҺ)߶1җpcT;Z8M_6!,:V~{fY)C}}o|K౨o]})ݐz ^QҵhQ_}_6#)60!kcNnTMIZ-z=d8BCk9VBSw̆DJYBp43A[?U $"ގ(n gmkikGTlRbC11j=vwuUWS{Ofnhp/c<jéX$DDI)6C LUQ F
+O
+endstream
+endobj
+958 0 obj <<
+/Type /FontDescriptor
+/FontName /MASBOE+CMR17
+/Flags 4
+/FontBBox [-33 -250 945 749]
+/Ascent 694
+/CapHeight 683
+/Descent -195
+/ItalicAngle 0
+/StemV 53
+/XHeight 430
+/CharSet (/C/M/R/S/a/c/e/g/h/i/l/m/n/o/p/r/t)
+/FontFile 957 0 R
+>> endobj
+959 0 obj <<
+/Length1 1768
+/Length2 11395
+/Length3 0
+/Length 12517
+/Filter /FlateDecode
+>>
+stream
+xڍP.\i xqwIq(Z,@"ŭ@^w(i9?sd&ye^{ɼPReBAP#3+?@L^=+Z h GJw
+d 22@wj̨
+U=, .NS=*h e/Fߗ`cf7Ct621A>!
+uS?0ueQ@2<PA
+ÚAp>?/ύ 5L<pG;@UI'{]=b\A&sP
+2KvNȚ$ʾb7١ɭЛ}Z+-BV+sUMfBطZ[u 9 u*}.DvS)R4u%WH5#Hļw*3ёØג7݃\k=0ė{{r){ ;ܤr  H:ߋ&:c!UJT3鳣T*짱hU|F-E96 (y+^iz)xdKu0%~sGZ8~."uR6ZMߚ"|q834 )F@.l`q~=Yr\N{vEd/ p 
+5q8T&a=fjޏ5L?ͱAczU o]1pz>5~uY
+D*P{V)jӚa1J!KIyެܡ@X\XFV=cstNv/~t.:mҽc7dؽHr/߇9(Ua%Rd/*{-
+
+7,介s+(:F[>5"ʶnm<|"NuwA}2Kjʗ% R 2s7k6NSEU 6~P 'P -E v C,`=O>v |9#K%`Pˢ+V?v)3v5,7=nJ=ps<\LS-ҷ8
+fHRK5ML=R'pI# o7RmZBF_zxHQۺ>Wmʙ=G m :
+IڊB.%kUIG[{;>cL_sW.Iq@>Z)In5I9k<*O'0+5+лD;7-/\hG$hkj0GpE֌?%t;s&H+X˂P}n wZoЂtj%157XEy4
+۶y|OoUEF*H/ 1LdH S?i6ﴊ5@m#`y}D=zfiԟMjWc6 #O~ #'`lߍ55珳Q!RbfNM\ƽߓ2h>bjԤCJG'WVhvP˒xrMr ACVRs 7uZgݵ;zjOnn9ʨ;0q;;y0+ɺ!ArvGOcK)F5L`|z`^9=7a&17Q+Τ11B4Q Y8!MGm(= o# X TӜ. U68]R,NK SfƎ4?+Y .
+>}*'- '7* RDF z̆9_d\Nkru;s"ur8q.8S06n'o}Ҋ4[ĐS
+o Ge0Tcw
+U2oD&I?yJO6ߒdQYmS=kR ; [zHx?%i3sPi^<8P>W_ Wwxda) c#[x/? 0yI0rX`aւw*[k%2sa#77"!"ck7jZ۲ _"(펰;]i!K@M˿RP,daBtMxX:V[m?vM;6>7p)A=.RI(m_覣|#/yDF?wV." wP$urQz;UuZ˙ (/ EiKRu]y'gȻ]_$U:Ehx<|rg-TJKjfxqD:ӧn6RZ3&!w]yG1z[FBݲÖ^mO5sawK ߒgŽډF!M6dft9:B0zCZL~ɞn8iM}WvW>!at).N1+{S5)ꞩ,܃ ^h߭SSFU$^=b2,`V4)mu=m@$bj1+^qO?'lnЈw2PΧ䚓hɼMy^O[=?p=unF$I,E>$8V.[FΙ~qy&-uBCAq2jDڍE]5y<-QjtXMFfID\qջf.35YџN|cǎ_v.ڈhdxQWMS=0Mg[~x(CI(4~(t^:j۽5U #)| *8sDyߟaHp 8AZj FG|͠3&P`j -B/$Zv*]h^f,2``g 3U
+<R#xJSW!Oy%H)?K58™5$BpQI p"BaN%nE*ָƫa09Hn Xlsl6z\1W utG5*֛/B~=LnSŞ_YH2+3.V#/a2Ԉ͊΃'x%[^d6}Jl5˴@eTb9_ OQb?r[[uuU>/1-Cq"m,ĠӋnFȫ XOi<?y76mѸzebnu ^i5b–(;t 3ئ[g/e.!h]sE.@Vl7O+cIjd
+wuoi5b\4@s[lˋ:՘I𵠐뒷9 9fBpˬ\ȅ
+ݐX;W՚=NkҴʪGuҫwWܻIpibg
+?Bpti٥^StZqk#AMh9.ZGo\rY,SJD悧c2}\Dx*yE۳y} U:([a=Ҷr~OLJƮ7Jhmɽ' .u\U#֦̿,du ℔u`E)JK0Tk <}gq FE8&I7,5[
+UVcC3Ƕ~V{`(raa6}S#9r@N 8kܫh>G;8`_nyYg=]ꕃ <hppD1bVs E 2#GX\f!SFpUBF62 ʻqG \1kU&p@ /[']2fJ~}(lr^&hA+P4"Stu m N FucJQ EWtv*gV
+)MV/9)Mg:4»'+;L00s+;>V?!4 =c &AjGLfMRG_\[@޿rvhǍŲQ92!FgiQ% {GJ׽xg}7I8>W֮
+MlƬ=Qod }
+8Jz8V.[dodrLJzPǯA4yFF]K% ƕZӇ/]XsG Z&B8 {)o1!Nnc1- V=vvk3n vd*5:"lzqxǀfusόXc"!Q_|lc\\qT^u||n`SIsll*^+򑙫t~lFpl]'`0KAKl1ORG›wy]x wc#uAciW<9_?F`Ff垘|c+3/JazıA'U7e'vJ+(7z:&}5|U)1
+]"꾼_ULG-H:٧EKc6L׋wrJrG
+rWzSShҡ'2:p"ğ@F41 I~ZML#Du7m՛d=zM:u$D$1#  #ZSD
+Sx&s958 f'Vj3,L'_L2bbx)=@ل4Lv
+uA:];$Tcm(jZ-J'm|W@ B;R- SiQcg|œMTI!%?:䞖6W”q5ki_-Z`aI-k(l" 먢if )|c-QfJWciNd`]yuӋ@|":ۯOP9ySjqO_xpV
+2w3+)gֺYm{p#
+Y1l||*5˴[`5A2L5̩PXq&!(Nx|F6YM[f Ơ.zN1& JaaGStrX6٨uOgs:+i :](xRA_%sMbV
+sWb!T{
+ڴ4,d.IG;@!(PzeshD,I`])fFT\Vʍ}#"4}?˚ yBJkN8)V1MR@ד?N0Ofr2 @Rؚońeflx0=SA.8b)P(V%s3"b(V#vcT;1(ZUؾ/ "=pzU˪1M9? t{!LձH2Jyg.q1^]C@)s&2r1(h2ab
+?T/9G\t_y@Ս/!=U|9`$u _ttA xBܟ/ Lev
+W֐|w
+DPKbXw5Xl]Bz_`wGXv_hf.Z*LE89;AyR_@fP kVz&jH遲l>عżD̯\~=TM -N1HtRffgӾ[h9n 53B|W_Zy :V\cEtxE3B4Oso,Cbm#&N%3VX'qp _IDKyĎҾ1QVlmTG$`6X2+5fZ"c#p`op[L1ZšOTzj" gQbJggnW/Y,fǁYF/
+uE^S 헱H=̍aןѓg*s7fYjt33U|d ?{4DpIMI '#(vt q.ȗxE Q(LA:64?n|卮X4_ы
+#K̐\y$pgxNeÞqP3 7K'm m: OKӋĩjT#o^MER4Yj#A!2?p
+⸩tsveٛKMUy(e?:snGtF'gu6RuJDh`? -K
+endstream
+endobj
+960 0 obj <<
+/Type /FontDescriptor
+/FontName /SOYQLR+CMSL10
+/Flags 4
+/FontBBox [-62 -250 1123 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -9
+/StemV 79
+/XHeight 431
+/CharSet (/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/Y/five/four/one/period/six/three/two)
+/FontFile 959 0 R
+>> endobj
+961 0 obj <<
+/Length1 1448
+/Length2 6332
+/Length3 0
+/Length 7318
+/Filter /FlateDecode
+>>
+stream
+xڍxT}?R)=n.ɱ`lFHt H4H
+HK* ! ]";繟=;g}\ngLz
+p{
+(i
+
+J
+I
+
+C8mPC\<a 
+W 췳wuB`
+h!}<
+C
+
+C1
+}g=\dV&gf#;?h' Eah~/&%
+9aMәFV֚blUBB̮t껼Vk3jA<F#JyG3 JYc@r'(ϒ\2զ ,.B1w E&7cӏm!s,obXC6 Z'Ysf3}{jGpZu0QJa\ vif r%(C 1h:+n9|̊k7(?jr`H>:]6M9n 6qaNyڡ+{ף<
+7{amhcD_w{RT>' HIXb$=~XЗz#Y{`wr9qʎXSjsŬ*_Gpg(X@U˱b2sZV Ӛ-{Pegx8a (ߛVqHioJ",%DWݚbh, OW#p߭R7+l@B;n
+,ь}cڅz\ /@pI'b}K5AN1sDa
+uÜ~o>!nn5*\e3=t`b{E$S`P=3o[ْ\Z`8^d6dg)nz6H\ΉEdZM`3&M~ 9qagSIz?jj|~),9DH?,tLly
+ӑ1|t |'.B/@n'ں[ 5}] &gOX$ [)eY*{߭!(V9p\1k{#gOtJFȢĉWzpNyf Eҽ(*LZzeGYWυ*m>mX8_`Aؽoʨ>wfk벓BdW3Qa6o_XxG
+*EA*J(ɰp<}H0VeO?~ G#Zf(@ze(㢓afvg;HXI/B:kM'z~ ՆջeV Sa3Y?GOet.tݩ9dĹu
+_b.>F$<^k*zAH_9bwj   2υŅn \pUCܦi.2rCy#TEfV4jtF)*6?gH`do ]5g]O-!b)vs_sQ޸=5;AJĺȕ Rs捌ZjV
+/}pز.W23 !V|Z[U3W-tq/YX^ː|˕qr[ WФ͠rid}-ΓRrxywíV&_+
+G_)=NouĬ<kØMRY7rSxO[>}fBi勰ZH?:^{yuy:oƗzmcܕS 129Js-mV [RsuXoR3[
+8j ^ 4 7{XOfS`Q)hĄFw2\oUE-gp@1|@Us^ϩNe3NS%##J)0tzjuۇoeeY %@\,ŠeOIt\vpO 1A; '^;]gAMsʵOKRKx1&g5[Ș]jF.%dTAqnl*4Yf,罛dO25\JO :
+uP;.贂wC RĐH"sOU?)MLJq Ro<9K]}2LK9^K#?YYԘV@v t
+ ne# ,,Xq~Xז)hG`d􆻑}bR{."?G$vR͜1E1yXA~ny..{6 7+;6X3YWlCy%(h׃Ϳڙm@紁aSbԅ{mfGHzr4}xISQk9[EQ\WU;I=d+q +4b1M d
+Ű!S Ypz`
+3QiPݛoIt~Ol+vdvHSg5_;Q Ĥ]Z%C5ߒ'AuwUT 9,bψ;z\;}o'
+endstream
+endobj
+962 0 obj <<
+/Type /FontDescriptor
+/FontName /IGSSBK+CMSY10
+/Flags 4
+/FontBBox [-29 -960 1116 775]
+/Ascent 750
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 40
+/XHeight 431
+/CharSet (/bullet/circlecopyrt/multiply)
+/FontFile 961 0 R
+>> endobj
+963 0 obj <<
+/Length1 2234
+/Length2 18579
+/Length3 0
+/Length 19898
+/Filter /FlateDecode
+>>
+stream
+xڌP
+n58epw
+4% gh4z8rӿvn@hbkt|%e
+XX{;⣟]?fCcBlo:_- 4p^IgÏ5L[8YM,Kyk [_{#>Fc8}<.d/_#`h 1&@[@ok0sa2 }0A
+0K#KpiL;SrwJj7JRɬIbp?\x3bV7MHqKrJ' eiOY8:,|iP Tiox=tkEicш@h :O;~J YQЖժmτ'j_&9-r0Sƞ(N@p{MG#Cz² \eH ?48_n xR$LifIz:N[ξ6xTZ'[g^Z=f_3gLM<+vKrgMi_-YbE- e|$\ne8Cfr/.ţ>h5.y5m ۄ;yɜ{դ㲼ЦFhWCe;x~ℳ'%_sHV~ %Suji:/WӀcpA`2jQMkѨG:E(@-Vškrk ΰyB˦zH wl!'Z&c=J҃1,|tA8Thx@V8snL
++D&lʙW3Tm҆D;]"p1\iggȂ iTYEВQ#y'*ݟE,kaO.r:Q4 8.6ܐ'@ϓb$?ʎ!ڼ1a+2<z7XȣF`;N"A1$O6T͹L7Q㘅$ R ~Z_"|SI\v
+|}Xj$8(-A>>g&guy$DD4mIF.=7`⸋ڥÒ8.GBD^__sɩ $I$ǹ
+4
+ixJŮdN\^!n=9f=^s~ߌ}^zeE:~XQDȨݑ>-(e:Kaat5w|jK?70uѐIέa0/{RfxЕp* 5~!tIQ@;~1|3Yn'Ҹ:$b)qM
+
+)J$>Mװ $=1%V
+9_}F B:+wms$B<,< &WwDL)/[|v/l̗'XmZdo\
+mc]:g]nw ׮M2Inr3MPA>bk&0q#gn-ƽ~' gFF~ҴLMQP !Hl1dƒ)ݢahs k 2B.÷>!%%"[1RQ
+BНyLrNGV2͉j9~Qmc9h~Tarꌸ֙W~&wR#ث (
+!.!
+
+OIȟ*$'v' Us<ux!x[ۗL 7
+r{pzΪJ4J7n29gUCmEXǞ{uxc^[G y2;>'dɈM4eq Jgw鑗 6~pha:>+40kp O! OsX]n)VCÔ*<AQV
+e|e
+tFCcԭW^mqf`t~9Oxk
+]\=q>-ʹ2.mζ⋗
+D܇œwr%.:MT關;N?fߚ#4JɃ7OFP㵔oZ}62gP
+6?6@ y.`;p˥gbJk2>D8Q5,RCkv
+ZV~^{Jq!yHC2Pο;7AӗtO[g%~;FYG6GilMIbGNH|>Qfj+eY﹮78i"R !񄖡coGFnJi
+VAL"eb jCMsuŰmmOR C̅Y6GHcCu-/U|qWv27+<Ah
+qFXy
+/-L 4ְe,|]HIŅWy ֔ 1N.T"=?bF" ˎ ަq_ A2zaAe`^ uC/^+IԿt O$k:$2c%afP45
+1@ e ԶK%)M&46LB#P588bAj,tfBp0pPk5̼
+J9QlN
+/ͳtmQ]spav](d*a P[t(weKMӚ{Υ_㙮ң~%0hZ9 tds]=*@?+y0#tQՏ3.%%.:>Hmgi-IxGz[7 ʇ$1{,aܷ"')|k̂)ab'! &lDi-Ysd{q{컝l}V]O m5:;)ٙ|8 onF|/icbN "+s^SXm<1\~lvzxDkwrF!,/Y!nD" P{֫b}Ȃ5(y_{<(9ÓS
+:7y`ԙW,Rj' >&nl2>SOo4_X:gk1sekH6-] /,-QQ~n&<</t7Q;JdJOKj+܊\߭:1]U ՝QV3#`?k65gb%czchKXnl]DSWe* 1c?nTS%?ir׿N ^p*q$D+ T4""0`QJDzx[d-k[fJՓC﻾[G$Q[deZHz#ыٲ#an6Bf>kpBK<=;CO RMi͝KҊs[I}>g,HO#KP7M^tW}B8H\͢ѽނ/G9! (ujj~]jШo]ʭ4m˗kig
+TNfH(ʒxQZe
+[m OKž39z@\@fw:;"G{obZ9c{BhUtYIo?(3+[t1&M/`-푱#mG׼PОv +1zls:.Hi ɋi_zvu=87F}ٗlMXʏ1YAOe%$GAJ߃eke;*g=X cDLs{E;n^`uYKsꂊaCP~D~bL%$èv.SȆe~}Đǚ,S @ moM}Տк&"6Oo )g%휰Gϣ
+gB|io,uexd ߂gy\18cK9hM(- ]k7rnz
+c,-ħ+LۗqP1hHWE~7˲ꍖt*(oHȜVq9yFo䡷̌
+ I c*[竢$f?=*wrqaj-^<駫&VJه =!]
+3hֺMžx.է&oc&x^
+!y}Egj҃
+ycHKɎW_4vV5 Dl_S0P"dBp!og!-k+oT X&1R!]T6YUiܘix$ "U$JtssU/A}W047~a'w M= $Ǽ88##R&y'Szg.01n(X! LMI ku3()gƉsB_ хMo8:#ˡ#kEaU̚M;=}J(]?<!<*|p|*y,Y\.RzgLN;A*L'x~C+I"~qL+~>EkbCdbf=YSPKu$;6~Ja? K5Z:uNH'"?4g<蛒
+NIyXuuG7FbTo
+H7P|!VGdk#'`vF/!Bڷ)ۍ.v-Q6[4إڼ={n0!qD´X{Y̽8V aQ5>Z&lvi<*Tσ8o\$'n2k EFs,·Ϳ~o`+ ޘ\' ]|-Xc؋8@&Cuҁ~9 '[UZx"S"^GJg۪`6B67b&HQGyL=yĞO29>q"=!C
+T> )Mj\Yrɬܸ]H2Ň
+zu3F]՗N<b[ 2hN43Gq-AJ }E~R7JeJhWYS_?kvR$ P|%Ķ=KX}߼\r҇q'&:+ Q0V
+@fTmlq?c|Y-K@ X|Lٞ&ZU63t MbKt2c֤)@Z#7bVjPOw}gRiptXx5#8Q$[AS{+cGiLFXlW (s]27@πi]gƙdr 6[ oTg#șXӨEWZL$er,<A?Fg
+o_Etfe<}Nh2o7ŧ( TU
+h2څy;P=Bzyu/#7 (J+\Fhվh+K8B$6.d2 }Z-Ƕ$[gk;v~&$h
+:ߺrQ.ݑ7KPQ]ah\P2 JBw&7,T@ݹ>+WEE"+ "$oE3ԙXBrF+ OߵG'zP3![Ge׷Ȫ7a5X.szDV-gbur5sSW,ۧM7d") o]$ҋ"`NF&`ؾC4GX ]0TqÕרk0h yhb
+3,QdL{>jsk礥46WcDopePpϷ5nI»'6fs(K8{jg" ۑeMBw!v0<wr^Py.w,nO&?* C V8
+]M̷aab~^TuuԯNДwݍ.ؗ\XikN;M 
+"
+oڇ纄ϼN6+U8dLAyY"`S' ?-nDE~ Դ"ne;oϧdDyΩQRXnN=O KI4p=!t8v4gy1a
+DD4s485DB1yaoTf9FՒmkE=3%L`Q
+KZEjUCwǷ\P\a$ XvGpӕ- L<rwEQU&N+Imit,jzY/5\3Rv\(-#:%fxQV4gaުЭ1O '
+zg:F!˸wGJRog[$}ٿE^vH ۭ]1.UJJ5*<N3z$KÜTFJוVfշyo4t^!@2q{lۛJAXKAPG0P\ &y3ϴ:!ʜA 41W8_IR@rTuTW*6^P h^Nj㜎6
+ ÖJ\׃Zid&G˂r@05{E! įe$QB{gsc5M)rfUw"AS3=[u%K NKZ۞cA"G
+=lMПg;f+\a3AeCq.0}(}7t|PW\1᢭ttS;H Va8Pw@6OqQ=اfO&KՐ7h +@ TE1\Ԟ" WF} !
+YC7Mcd
+-4LDIoxr:f&lEi{asҀGX_H gDE*WҴ ÈP Wom%i+
+ HxÂH2 P47K܆ͅ_쬂Ԣ;$M:<`'h@ÐGT5aCF.ʝvFѷUm&ɪ3(Z! *ɒkkL,5eRr? t2t)#5)uϹ|PΔsM
+4vi&sw+sرIJO{[':v%N7!2znʳkp!et$mBfrC#KQX*~ӥC|YSO" ʍ,eA3#[7lXk9;B,3=D,$ҍY:1e*UZl˝76Ab)
+E' ђ!,:=Қ Q 57Y v6N3_FC|~澢t(gd1!FwEs2,ybPCXYMY A$&J-E6\Ś۷6x+nXg c9I稑RKi,C _;iH|T=|XyWUQR7Д$3^iS^ 행m Pj$#}lYS8%AQ,F$Oj4[|qʈzdX;,Mioc`š۪+ [ |Wn
+aFY ЃZMK޵HR +ut3r'uϷWt&4N0!>Erk{z[AlMNwвv;Jv :u,]lO\*uah1 u<u2p$񚯻$]757|j:12(}MޡUvs< FheU a$l)2lW*OX]`n7_5lYoh`dѭ&θEU犿_I3
+ST~͵RbΨ6Avv\J9ųE"_1sQX⯻N"Zl!^A:錡5/U)|f*,p-~Q9*OuJ'|!)_|PgPåQwk@kl6
+.B%W)Qap-Ye)~" G8|&ѧH,uԍZ=r@I(TV4lZ@ :۟>R` ~`)Pa;l ߸, 9,,k@œ+!1N>&K'ٺjAj^}}h'[v
+:;g^@]b[&G݂36}]aɎ;1K HWNB #tn,dđL8@JOk
+<BQHJ 
+m@1a@bH
+bHgI'&3[.ɺN7U<ZG%Q ~V܊`cq1"t.V
+F`H}F_q^ @07-Țn(BCu>" T0H~޵LfWi9<aT / tEuhfaOТo5Gn!ۭ̌<6/8뿧*qBb6ܻrs
+J6ũ_H.:A"ue |DIjɊ
+mH$]$w+LWy۷L*cSa)E vl*19!)!S
+sւi90t:: )
+'3-n+&\["o^ѹF'\_ŌjHY!{Pr[/a˫ #vUG]ɑ@x^ׅ ]
+endstream
+endobj
+964 0 obj <<
+/Type /FontDescriptor
+/FontName /HQPCHE+CMTI10
+/Flags 4
+/FontBBox [-35 -250 1124 750]
+/Ascent 694
+/CapHeight 683
+/Descent -194
+/ItalicAngle -14
+/StemV 68
+/XHeight 431
+/CharSet (/A/B/C/E/F/G/H/I/L/M/N/O/P/R/S/T/U/W/Y/a/b/c/comma/d/e/f/fi/five/g/h/hyphen/i/k/l/m/n/nine/o/one/p/parenleft/parenright/period/r/s/semicolon/seven/t/three/two/u/v/w/y/zero)
+/FontFile 963 0 R
+>> endobj
+965 0 obj <<
+/Length1 2917
+/Length2 20635
+/Length3 0
+/Length 22277
+/Filter /FlateDecode
+>>
+stream
+xڌT[
+S ! RNfnNNIn i=̹fϵ~+ %lmx
+%ܜ
+N 2!x:
+<&]_+RZY3nd]3|kx (5B5LA.%u-XSjhngĆa ;jp%~o9
+1Ct
+ϻs$mAJqӆ ?'rG>E 7иY7aiU%c "18Wڙz2uyqgf1Vw{MN1+ ìB[gXRhaG z6{vVNِ܉<:+!#\))*)5B
+֬سҼ_p.'>f+"h+7\Ti=R*uvYUSZn&##2ͯRÛ2iL
+
+Iciۃ#]n#֘>}ۛcv3w,! @)bnٻ)Q뜮(a<Q|x@n@qH# ztGwesg' ݍYj}
+O룻*6ٶb45Z$u
+[h4@{"\r<]"Zؑ]:4-HU1;؛/@͕/d@<a{t׳o!MոɾڛX8j'i|sPB&~~
+jDC1(}~܊N:^QL?Z64RۿD{a$ &y-"Iʼx06eHQvh-A.OpElF h ,xǹY-g{NMu`91$UնIƛMIaƳ[M[,{~Vj9{Y`׾c1`mSJW)7B`󐈛cP-]<vgO8nffOtV^_ ϒ݄t6
+p6•CP6Aa4+LN0Gi?Õ,"(8r,qFKPM<ol #tTzl#*'zUk?{}j&Z2}3 L|
+:1vZd&`ŭSHZMN `5(.ɹ`z'Bު\1klan =4 ye*HzUS6⌨iw-J?T>G/W&0S%1ŏ$&?kS+w-a;
+A4d1|kS1v+SsM|КLddMޏ|mNdl@Țz~.DK o %T;*#L oL">mSFk|т t* MH2$c$=91嵺"9vU
+f` ֘%tڍHs#Xgs [,'RM,A$pNGZ6p"0aN vmA:D1ù V#|D?<ȭx`a¡k Y-7fE_
+2h.jF_4euyN 'ke鶎nX;gOp<z+3}FkICg WkۀǦ|HCUP7| 6X&9ZKC>hJJ~Xh/dD7o$^#"0z;΅Do 0paۂ[Aë(5 f1m(0*߉S<1cBv3F|)qj
+}"yj7a0g|[Ky]2AoC7dכ@ [X 7xD&ɴV$ }uא?n1(L̨^~x_Aj% 'pJ1s+r4Fd PM(E<6uP WHQf|Hdy7G!NSbyCfC-X쮀?9!{}jvz v f2m1ű|E39mv:/mWZO7CʫR%6 @z= Y|~7JP_6Rf|]w- T@ƺ;|$f{-j6vK5W0e"4 4|3},m\H)9ZxslBMN\yd]}+S#tR (vgbh| BN^~hƃ WΦWy
+0ymۂe#i3uYhSymRSz9~Hޓ\8<7SI5T)nbwoj=h&5'a6q&/mxk~=g}ʠܦU zq^dqKtÎ$
+*QI7K${ajw2GNpј VHe4V(t{8#/BxC.N\#a wro) x&g/ڡ:J[!1/"!ɮ%^ ܽ%2GW_¹%Kd=
+raps lS86_Ky,[qD$>PC,f-<1r&dK@q !aJDt##갈jSܬ%s.rW%ĴTХ 1`mJ`:e9&!b8`.dOU^XU5W4< Ѫ=(#:z|Ed5rXs!CLH3dSJ@&͢7iDP!iK*1W%4lL'S*]-ٵml0dj 탽q*#0x<.mNEʎ.8z tJal1! iQOhNjWhBЁcgN)PhD8"M0-}}MBYCt.DbaANN9ۊt"yYdCO#[t=i@f<93K(8{ArʇR=Hy[y}p+yU( 'Uω%
+\(p<.#$3eg[ EnXZֈ˳R#M
+yXEEcyߎb rwΆ yb<<ȏ7Px8gdm29ݔ214ztO?U{~+Kw9]m
+{x3qih* {v?IQScH
+T| @WNY&,k_"& mpŬ#?cC9րV]Z[zoΰ׳XK4ҢU1C-)p$_ygƱC%&þa*SᶎU r΂$Bå]~%n.X
+*/:A} J]n h8i/1 ~*
+}+f[~&uz
+4bg"N 7><>o0rpmbR[y={0ƸDv5H5WY{N*9zh|c%a;
+>\~{/۔ӒeF%׻oh
+m&~hâ= VK>()2EA.w PfV털eR<7WLC+Ti6i>
+h
+«Ju~,V+7g5E/\bKuBy
+h -\݃>[.C&exn$.l4Ţ'<Tf9KLUɓI*x"OP4փk}X̉[X+Őj ٰ?o|ºAJ.P KH2ѐ9JDž2]elx 5)`P"}Y̴q/JIU}ty'l{T5ڽ6mM@ bht3?e@E)eK3#A;\%t9USkOE\T`hLˀbYBb <L $<n&iΕpn7Vy痖Xj0MOyc|4Wgfq8%ѴC;rW_~|DUŢ ,M/d0䩑ȳ|,7+ڹAEeFUtE33i ;W$-[u
+}<ͷ\AWO\&w>h$o[CgTh߸vZ-
+d
+rٖ#A;\A0FgA'![ye ,vͻ T<W(d|=Z9yU[Cׅbа<*cXl*xWyi܏9mMг|c - VetlYe#-mHh zA`5r 6nGA~禙6)
+6ž18l-X^#b^*KUE]ƌFW/#KcPx
+ѝ0m3^ nKoJiu8O/qK&ɛm.7-y[XR91d fXhG:P_Q5
+ڳڄ|"ϔ>
+txgVN7\2ҋ"o%ɴձ3Flu36rv(4@
+~Ϟn}A ggoĚK{_hT2}#O 걢k^Y2{ثk(T_MDXeFML7_q_rOX+H%i4},$CNp6Uf6 &3-b(8jPG'fjtZSQ6}Ow"OG"Ha֍sbig<dfx aLd֢P v5f홥~tqh1RM^%лP6Ϧ73^Yj)@,+a)k)!I
+ׯJ0{l܄"?5*ɇ~\ZS1HHsC,̎ZmUE; "Mn}M@T1v\˴C@S we%v8(Y"}=E1P9
+%BN< +X[ FF*/2@I S5[6/HH)5Ȩ[lZ~ђy
+1d`}%+]`HG<w7+ YDX\ |(|$'X,K]z H=tWj$܌Y8#8yo0V wQ0&Bk;?e (JwA,<[ ƛ辰/ 07hK~KLUhDߟ֠Xhi*WeTFra:bKuZ6y z1@w7`QoPbYs.dSH7,n6%Y~xKZ;wOŸ޿K
+ǍremI$jUCͣ76 e{IUpYrl4ФtBG,B{&b*~nd궋]7|[THRjaH&6̛nj)Ì:*-͊ :J;q^=75ɷT|qX~ # ݪ-$Ƅ$7ܽ{h %.ũj+2~08fw -+Cv`ȜY}4X (miWz"2z{T`[:G"%ŃVqT\N\G6$0ƳlJ̨lȹ7b?bmqH +U'I⬷5m'Mʅ,KiA=JhO yakE-0_ah&zeg3}Qa1Tz׉+bKnaHo-BpM3觤 )9مќƆa7"+n§VMLo`LWM>#ȯ){qwûԁkvDYK܉Uh2E/MO88}L׳')WZvvQQr:E [A,!ӕ9#^'<5i %!9E!sq< j#A`Ry$ ʥMSI@*tŃy<Q$bROJ<$w^!}R|ؤ>FLVL
+#v*3>rKҗmD`W7]<>yMoaŭj2q(GЯ( )nT3Pn
+x=d@q0ZOTED\1:h'2U v|[,u3|
+p"h:0VkQGkjU{k5J2=^U8Q}̘Rⰺu'o)3ϸ\l<]eaƆf);
+صN>/^֞.cPG:w)82F}a K0WAh2#",&($~5$b{Lzz_lslʨiy.Q055Q|jYKDžksqg-wP%G˭
+5%rڶٶ8CM"= V"%=kIhXFuڸz)YJcQ^.q;gG~,$v(.i>K[Ⱥ_'߹q:D*B'cm <oBdid<6^v<1J?=M˝Yi&6%z!`Ou~f*2'_E[}QaHK{<vF0KIM# vvVw1 X@>ŷykIa){yq W"ʍqvcu8_i4RlzɑO dwq/O-nT e
+R5oj.E{aA빸A-~Ȯ{ǗCii%V/嬣`
+vmfb pt^$] 4#vz|&:#<np\St/\hB9^CDS x-bƴ'm܅t &Rav|k$qr"*3pBE1 {MKEe7\ıE>"
+>@?WQ6%-#e9|N
+6ut
+/;) 1) P=QwL#N1s
+.Խ;24_;جmBuZ*,㾵 .H0l_!hYM$, vfȉ }aa\6_IH:B20'~%H1vŖ"z^C?„O<`3?FQ-gix>S}@]mTsv <h0PA[0 +dE>֏sЗ,8FPWfmpJ%
+ws;yڕ|x*I%b(
+QB%@Zk[Z3萄J"ba˵YTE:TgtG;aKYx0KE @Co@Sski
+뫘(3"ZA˳PSi_)5$^٫A*fx7hGo*ZhǟG6_ JcqC
+zۧ“4 })c>Jٵ&+u<$=Io[rЕsJlb>8Om٭xȴW30;xu<*gd Ո%soq{޴Nosa,xxeD eI0'}[;dzofJ,+M^Gw`|q_϶u;v#If1]$=꾿jHɞ7J\t~<MU,ƨ}^ i ɤØ.g:1M?6䥓~n9\.UzpT-MP`mT?#[p&~ūCgՁ@Ox]X3WjI?;}tf<I-m_ao:L`+38-1Ԯd,2ujH+1иA Ad6sΥ4ۙXN=^N0jd?X]JNY}T""3;i(&\8qtBOm1
+<#J¾R~'Gb#IO [.Y:!l͟ [ō@ J Bkq(l<iPRfl;]v/?U)UmFg Pc]ܥ6%WC}ݗlyo,ڀmjainZ\ `OAKL-(F
+FA66 wjYlØ{<eI6T[,W:$UeG@1&!7Nh؃X82l"lZ8x;dm eS}D
++40aŚMYHkcv2=ՏMpS:¿S<vU/G79a#k7MF+rvIԁ{0 \ :
+^UUh<MQVMqy,K=5F&(XЌ+&dd2 j7d˺/*pMi6?6HcYmhgH
+($yt%XWd!מ&evƝ"nŘ4Vg`[ID9}bO!5hDt Ls=P_>KۇcWjCѻLCBKIFV)z]}Y=#] Nk_Z6vn)?wXN9AqT;*Ѯ
+g\5}%ygbVgԻӃbvyS&R.I]]eK._ܛ2%6m[&>1i@5Zx뺡e 3q7-69=kUϴ t_KQ!9d[Tha:7
+TM .P"aAgg߈5v2 sAy{+?W!Ru;-48ĎRHfNWa^2jU OTWVY2ﰖA9K<G!i`ȳl3}]pT3C+Kdȗ:3nHUU_6^=Ed&]}"2E8Øe+}^ =V+:j n 8hrЪ0``vإKsV,}:ĜbaD,灊yc[вA%TH.m6Xڟfҕwed]Zm3JvЉ.Uָ՝f/mA2}Ѡ0^}KdvRZ4Oך7c5b7<b7"SW~Y,Mk#.Gڦy宗 0-$Hoh49wǒK ENNID8!< l>E(Mؽ Aډ`)lFE.eT
+/sU8VӅyp}?W¯H ,PqF+]$gju" =j!h(HLmqIt0)K Aq }p QJqL\`/@E.:7ύM[;G$?IW[U습h,k&OޒGM'W": \V`,EO>='AXJaN޻jFYk(*3..Kgu׉/wԫOK
+,uDXXfT) ٬8`En(<«b;#5D|\<IcY&o kM2>3-$v<{:;z.Rz#'oAD`txnIۨQJ${Rx'-BR$6 \.#goC[,6fM2Aւ=+89.7ۙLN3)Bw0z
+~iSڼ>&KZkvV^3iznU&kB>ògJ:z5V:HhyPX]\b>WDFO:*/~;6|
+w|.ʥD26z»tc-M-s]b}G(T@`@a8@]~|0`qd6*,!\!׼iw;H̰^I[wsÑO6!0mZL5R7@8IP.#0.uD5b=%"zzVA|xX*/S
+.@%MO?=G<KZE8f^'Ro靧nFeV#23R k3^$@h>=qiiplvJFjiւ @Lz
+ SqυE;3c7\4>:IsJE"u<N[#% ClTwgy=M4&Ny{܏wJZm/y4[WzT=Ǻ&Gm׋G%dj^Q@8[o:/ Rtdƶ
+
+E1t6JtFnN7fni*pWS6ZIHhD;{n<WSF9d$Qi?A]U3~
+YMC
+C,XGOc6.<eR hԁ9+~#PQcF99ABͰNhG7mL*6*̦SD LVxSXz:6^c5C 1T+Vh<D3=]7mSÒ
+PDT:
+#
+߼kpEkP@ױ>8c%}Z$<n31,Q8mE1H(RWZ*Girwj3C`녤Ǐn{̩,hE~Gvo.ң2ͥQ턩l}tY٩cF,ώɤ^,,p#`
+>-MZnוkJ\\o.j nE;i>kBp ->q,Tw&uD:k$ ck)LM].N6"BL;2 \C7Ct$d/[~^E;LOtDXFw `.tx*T:enve.f,^ʡj.+€[iHt8A/?\O-1f.tDյy7F{Qc¯!Oϒ~\lȗ-^x
+%7)= QWݘd-y
+$ndT:̰3y<Jz
+1.,/H|(صF6EJ~jÅԡާ8B16bl67
+=c7;V)t/c?YỦ0|ڕʎ변/RA7%KR \AUK
+#SּKrǀ<SyW[{''kYfBjп@MPsȥDZK˽_ʝ9'nPZU_c)*CdH+JM _i]8 %$Zz9ĶekgMe]^"5\4(ɷ;ReA>Rȸ?CjV; % ^
+'1F&wohDhG;u^Eu&SX(3t
+f1ŏEn`C1";8L^u%N16Mp@#M|n YWwM!<W[V+3Qiacrj yGĐ<}k֜(PAPh KHԱG/p e(;,䙧q,_Yڸl?,4sT
+Yj\ZT0AuN67-~7@gD Y>/g|Ѝ\ + 8)Z!q ɲ&<,g2ueа6T[hW17Tq:~\Ŏ6u'=Uf9IV⥽$La~Ң?;rdmLB:E
+
+׿e0cQK-u㬮 9Xζ+ȢFt3Y-F>E@kDdUtkh_H 'O(WIvB,B82?hK'כ!=o&pcI2^ļpIv|uȼnTesH
+^Ɇ/!|T]wKX
+윫LNFR()P(e[`?b$?#snuo@ͬ(Bon|uV^O_tk`ϽfE1$Ca.D6f3Śڌ"X#.Ft.l0ĢN8}?DmoXby}|{1kx2=R7|= krt@kP|<"XWnv*6.B|_}02afB"9>$W.)tJP+,`NcwH5fV&y+x3w:.X
+d4vTqvYvlerA
+endstream
+endobj
+966 0 obj <<
+/Type /FontDescriptor
+/FontName /JZXTIY+CMTT10
+/Flags 4
+/FontBBox [-4 -233 537 696]
+/Ascent 611
+/CapHeight 611
+/Descent -222
+/ItalicAngle 0
+/StemV 69
+/XHeight 431
+/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/X/Y/Z/a/ampersand/asciicircum/asciitilde/asterisk/at/b/backslash/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedbl/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
+/FontFile 965 0 R
+>> endobj
+376 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /ZLTGNC+CMBX10
+/FontDescriptor 948 0 R
+/FirstChar 45
+/LastChar 123
+/Widths 940 0 R
+>> endobj
+331 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /GVPGVG+CMBX12
+/FontDescriptor 950 0 R
+/FirstChar 11
+/LastChar 122
+/Widths 943 0 R
+>> endobj
+628 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /WBWHMG+CMMI10
+/FontDescriptor 952 0 R
+/FirstChar 79
+/LastChar 111
+/Widths 937 0 R
+>> endobj
+325 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /LJRBTA+CMR10
+/FontDescriptor 954 0 R
+/FirstChar 11
+/LastChar 123
+/Widths 944 0 R
+>> endobj
+324 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /TCMCSC+CMR12
+/FontDescriptor 956 0 R
+/FirstChar 65
+/LastChar 117
+/Widths 945 0 R
+>> endobj
+323 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /MASBOE+CMR17
+/FontDescriptor 958 0 R
+/FirstChar 67
+/LastChar 116
+/Widths 946 0 R
+>> endobj
+424 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /SOYQLR+CMSL10
+/FontDescriptor 960 0 R
+/FirstChar 46
+/LastChar 89
+/Widths 939 0 R
+>> endobj
+333 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /IGSSBK+CMSY10
+/FontDescriptor 962 0 R
+/FirstChar 2
+/LastChar 15
+/Widths 942 0 R
+>> endobj
+334 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /HQPCHE+CMTI10
+/FontDescriptor 964 0 R
+/FirstChar 12
+/LastChar 121
+/Widths 941 0 R
+>> endobj
+445 0 obj <<
+/Type /Font
+/Subtype /Type1
+/BaseFont /JZXTIY+CMTT10
+/FontDescriptor 966 0 R
+/FirstChar 33
+/LastChar 126
+/Widths 938 0 R
+>> endobj
+326 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 967 0 R
+/Kids [318 0 R 328 0 R 372 0 R 421 0 R 426 0 R 429 0 R]
+>> endobj
+436 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 967 0 R
+/Kids [433 0 R 438 0 R 442 0 R 448 0 R 453 0 R 460 0 R]
+>> endobj
+474 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 967 0 R
+/Kids [471 0 R 501 0 R 519 0 R 525 0 R 543 0 R 563 0 R]
+>> endobj
+585 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 967 0 R
+/Kids [582 0 R 602 0 R 625 0 R 636 0 R 641 0 R 648 0 R]
+>> endobj
+670 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 967 0 R
+/Kids [667 0 R 690 0 R 701 0 R 707 0 R 713 0 R 718 0 R]
+>> endobj
+725 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 967 0 R
+/Kids [722 0 R 729 0 R 741 0 R 764 0 R 775 0 R 781 0 R]
+>> endobj
+802 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 968 0 R
+/Kids [799 0 R 817 0 R 822 0 R 830 0 R 834 0 R 840 0 R]
+>> endobj
+848 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 968 0 R
+/Kids [845 0 R 852 0 R 858 0 R 863 0 R 867 0 R 871 0 R]
+>> endobj
+882 0 obj <<
+/Type /Pages
+/Count 6
+/Parent 968 0 R
+/Kids [879 0 R 884 0 R 890 0 R 896 0 R 901 0 R 906 0 R]
+>> endobj
+921 0 obj <<
+/Type /Pages
+/Count 2
+/Parent 968 0 R
+/Kids [918 0 R 929 0 R]
+>> endobj
+967 0 obj <<
+/Type /Pages
+/Count 36
+/Parent 969 0 R
+/Kids [326 0 R 436 0 R 474 0 R 585 0 R 670 0 R 725 0 R]
+>> endobj
+968 0 obj <<
+/Type /Pages
+/Count 20
+/Parent 969 0 R
+/Kids [802 0 R 848 0 R 882 0 R 921 0 R]
+>> endobj
+969 0 obj <<
+/Type /Pages
+/Count 56
+/Kids [967 0 R 968 0 R]
+>> endobj
+970 0 obj <<
+/Type /Outlines
+/First 3 0 R
+/Last 267 0 R
+/Count 6
+>> endobj
+315 0 obj <<
+/Title 316 0 R
+/A 313 0 R
+/Parent 267 0 R
+/Prev 311 0 R
+>> endobj
+311 0 obj <<
+/Title 312 0 R
+/A 309 0 R
+/Parent 267 0 R
+/Prev 307 0 R
+/Next 315 0 R
+>> endobj
+307 0 obj <<
+/Title 308 0 R
+/A 305 0 R
+/Parent 267 0 R
+/Prev 283 0 R
+/Next 311 0 R
+>> endobj
+303 0 obj <<
+/Title 304 0 R
+/A 301 0 R
+/Parent 283 0 R
+/Prev 299 0 R
+>> endobj
+299 0 obj <<
+/Title 300 0 R
+/A 297 0 R
+/Parent 283 0 R
+/Prev 295 0 R
+/Next 303 0 R
+>> endobj
+295 0 obj <<
+/Title 296 0 R
+/A 293 0 R
+/Parent 283 0 R
+/Prev 291 0 R
+/Next 299 0 R
+>> endobj
+291 0 obj <<
+/Title 292 0 R
+/A 289 0 R
+/Parent 283 0 R
+/Prev 287 0 R
+/Next 295 0 R
+>> endobj
+287 0 obj <<
+/Title 288 0 R
+/A 285 0 R
+/Parent 283 0 R
+/Next 291 0 R
+>> endobj
+283 0 obj <<
+/Title 284 0 R
+/A 281 0 R
+/Parent 267 0 R
+/Prev 279 0 R
+/Next 307 0 R
+/First 287 0 R
+/Last 303 0 R
+/Count -5
+>> endobj
+279 0 obj <<
+/Title 280 0 R
+/A 277 0 R
+/Parent 267 0 R
+/Prev 275 0 R
+/Next 283 0 R
+>> endobj
+275 0 obj <<
+/Title 276 0 R
+/A 273 0 R
+/Parent 267 0 R
+/Prev 271 0 R
+/Next 279 0 R
+>> endobj
+271 0 obj <<
+/Title 272 0 R
+/A 269 0 R
+/Parent 267 0 R
+/Next 275 0 R
+>> endobj
+267 0 obj <<
+/Title 268 0 R
+/A 265 0 R
+/Parent 970 0 R
+/Prev 199 0 R
+/First 271 0 R
+/Last 315 0 R
+/Count -7
+>> endobj
+263 0 obj <<
+/Title 264 0 R
+/A 261 0 R
+/Parent 199 0 R
+/Prev 259 0 R
+>> endobj
+259 0 obj <<
+/Title 260 0 R
+/A 257 0 R
+/Parent 199 0 R
+/Prev 255 0 R
+/Next 263 0 R
+>> endobj
+255 0 obj <<
+/Title 256 0 R
+/A 253 0 R
+/Parent 199 0 R
+/Prev 231 0 R
+/Next 259 0 R
+>> endobj
+251 0 obj <<
+/Title 252 0 R
+/A 249 0 R
+/Parent 231 0 R
+/Prev 247 0 R
+>> endobj
+247 0 obj <<
+/Title 248 0 R
+/A 245 0 R
+/Parent 231 0 R
+/Prev 243 0 R
+/Next 251 0 R
+>> endobj
+243 0 obj <<
+/Title 244 0 R
+/A 241 0 R
+/Parent 231 0 R
+/Prev 239 0 R
+/Next 247 0 R
+>> endobj
+239 0 obj <<
+/Title 240 0 R
+/A 237 0 R
+/Parent 231 0 R
+/Prev 235 0 R
+/Next 243 0 R
+>> endobj
+235 0 obj <<
+/Title 236 0 R
+/A 233 0 R
+/Parent 231 0 R
+/Next 239 0 R
+>> endobj
+231 0 obj <<
+/Title 232 0 R
+/A 229 0 R
+/Parent 199 0 R
+/Prev 227 0 R
+/Next 255 0 R
+/First 235 0 R
+/Last 251 0 R
+/Count -5
+>> endobj
+227 0 obj <<
+/Title 228 0 R
+/A 225 0 R
+/Parent 199 0 R
+/Prev 223 0 R
+/Next 231 0 R
+>> endobj
+223 0 obj <<
+/Title 224 0 R
+/A 221 0 R
+/Parent 199 0 R
+/Prev 219 0 R
+/Next 227 0 R
+>> endobj
+219 0 obj <<
+/Title 220 0 R
+/A 217 0 R
+/Parent 199 0 R
+/Prev 215 0 R
+/Next 223 0 R
+>> endobj
+215 0 obj <<
+/Title 216 0 R
+/A 213 0 R
+/Parent 199 0 R
+/Prev 211 0 R
+/Next 219 0 R
+>> endobj
+211 0 obj <<
+/Title 212 0 R
+/A 209 0 R
+/Parent 199 0 R
+/Prev 207 0 R
+/Next 215 0 R
+>> endobj
+207 0 obj <<
+/Title 208 0 R
+/A 205 0 R
+/Parent 199 0 R
+/Prev 203 0 R
+/Next 211 0 R
+>> endobj
+203 0 obj <<
+/Title 204 0 R
+/A 201 0 R
+/Parent 199 0 R
+/Next 207 0 R
+>> endobj
+199 0 obj <<
+/Title 200 0 R
+/A 197 0 R
+/Parent 970 0 R
+/Prev 171 0 R
+/Next 267 0 R
+/First 203 0 R
+/Last 263 0 R
+/Count -11
+>> endobj
+195 0 obj <<
+/Title 196 0 R
+/A 193 0 R
+/Parent 179 0 R
+/Prev 191 0 R
+>> endobj
+191 0 obj <<
+/Title 192 0 R
+/A 189 0 R
+/Parent 179 0 R
+/Prev 187 0 R
+/Next 195 0 R
+>> endobj
+187 0 obj <<
+/Title 188 0 R
+/A 185 0 R
+/Parent 179 0 R
+/Prev 183 0 R
+/Next 191 0 R
+>> endobj
+183 0 obj <<
+/Title 184 0 R
+/A 181 0 R
+/Parent 179 0 R
+/Next 187 0 R
+>> endobj
+179 0 obj <<
+/Title 180 0 R
+/A 177 0 R
+/Parent 171 0 R
+/Prev 175 0 R
+/First 183 0 R
+/Last 195 0 R
+/Count -4
+>> endobj
+175 0 obj <<
+/Title 176 0 R
+/A 173 0 R
+/Parent 171 0 R
+/Next 179 0 R
+>> endobj
+171 0 obj <<
+/Title 172 0 R
+/A 169 0 R
+/Parent 970 0 R
+/Prev 123 0 R
+/Next 199 0 R
+/First 175 0 R
+/Last 179 0 R
+/Count -2
+>> endobj
+167 0 obj <<
+/Title 168 0 R
+/A 165 0 R
+/Parent 123 0 R
+/Prev 163 0 R
+>> endobj
+163 0 obj <<
+/Title 164 0 R
+/A 161 0 R
+/Parent 123 0 R
+/Prev 147 0 R
+/Next 167 0 R
+>> endobj
+159 0 obj <<
+/Title 160 0 R
+/A 157 0 R
+/Parent 147 0 R
+/Prev 155 0 R
+>> endobj
+155 0 obj <<
+/Title 156 0 R
+/A 153 0 R
+/Parent 147 0 R
+/Prev 151 0 R
+/Next 159 0 R
+>> endobj
+151 0 obj <<
+/Title 152 0 R
+/A 149 0 R
+/Parent 147 0 R
+/Next 155 0 R
+>> endobj
+147 0 obj <<
+/Title 148 0 R
+/A 145 0 R
+/Parent 123 0 R
+/Prev 127 0 R
+/Next 163 0 R
+/First 151 0 R
+/Last 159 0 R
+/Count -3
+>> endobj
+143 0 obj <<
+/Title 144 0 R
+/A 141 0 R
+/Parent 127 0 R
+/Prev 139 0 R
+>> endobj
+139 0 obj <<
+/Title 140 0 R
+/A 137 0 R
+/Parent 127 0 R
+/Prev 135 0 R
+/Next 143 0 R
+>> endobj
+135 0 obj <<
+/Title 136 0 R
+/A 133 0 R
+/Parent 127 0 R
+/Prev 131 0 R
+/Next 139 0 R
+>> endobj
+131 0 obj <<
+/Title 132 0 R
+/A 129 0 R
+/Parent 127 0 R
+/Next 135 0 R
+>> endobj
+127 0 obj <<
+/Title 128 0 R
+/A 125 0 R
+/Parent 123 0 R
+/Next 147 0 R
+/First 131 0 R
+/Last 143 0 R
+/Count -4
+>> endobj
+123 0 obj <<
+/Title 124 0 R
+/A 121 0 R
+/Parent 970 0 R
+/Prev 27 0 R
+/Next 171 0 R
+/First 127 0 R
+/Last 167 0 R
+/Count -4
+>> endobj
+119 0 obj <<
+/Title 120 0 R
+/A 117 0 R
+/Parent 27 0 R
+/Prev 115 0 R
+>> endobj
+115 0 obj <<
+/Title 116 0 R
+/A 113 0 R
+/Parent 27 0 R
+/Prev 67 0 R
+/Next 119 0 R
+>> endobj
+111 0 obj <<
+/Title 112 0 R
+/A 109 0 R
+/Parent 67 0 R
+/Prev 107 0 R
+>> endobj
+107 0 obj <<
+/Title 108 0 R
+/A 105 0 R
+/Parent 67 0 R
+/Prev 103 0 R
+/Next 111 0 R
+>> endobj
+103 0 obj <<
+/Title 104 0 R
+/A 101 0 R
+/Parent 67 0 R
+/Prev 99 0 R
+/Next 107 0 R
+>> endobj
+99 0 obj <<
+/Title 100 0 R
+/A 97 0 R
+/Parent 67 0 R
+/Prev 95 0 R
+/Next 103 0 R
+>> endobj
+95 0 obj <<
+/Title 96 0 R
+/A 93 0 R
+/Parent 67 0 R
+/Prev 91 0 R
+/Next 99 0 R
+>> endobj
+91 0 obj <<
+/Title 92 0 R
+/A 89 0 R
+/Parent 67 0 R
+/Prev 87 0 R
+/Next 95 0 R
+>> endobj
+87 0 obj <<
+/Title 88 0 R
+/A 85 0 R
+/Parent 67 0 R
+/Prev 83 0 R
+/Next 91 0 R
+>> endobj
+83 0 obj <<
+/Title 84 0 R
+/A 81 0 R
+/Parent 67 0 R
+/Prev 79 0 R
+/Next 87 0 R
+>> endobj
+79 0 obj <<
+/Title 80 0 R
+/A 77 0 R
+/Parent 67 0 R
+/Prev 75 0 R
+/Next 83 0 R
+>> endobj
+75 0 obj <<
+/Title 76 0 R
+/A 73 0 R
+/Parent 67 0 R
+/Prev 71 0 R
+/Next 79 0 R
+>> endobj
+71 0 obj <<
+/Title 72 0 R
+/A 69 0 R
+/Parent 67 0 R
+/Next 75 0 R
+>> endobj
+67 0 obj <<
+/Title 68 0 R
+/A 65 0 R
+/Parent 27 0 R
+/Prev 63 0 R
+/Next 115 0 R
+/First 71 0 R
+/Last 111 0 R
+/Count -11
+>> endobj
+63 0 obj <<
+/Title 64 0 R
+/A 61 0 R
+/Parent 27 0 R
+/Prev 59 0 R
+/Next 67 0 R
+>> endobj
+59 0 obj <<
+/Title 60 0 R
+/A 57 0 R
+/Parent 27 0 R
+/Prev 55 0 R
+/Next 63 0 R
+>> endobj
+55 0 obj <<
+/Title 56 0 R
+/A 53 0 R
+/Parent 27 0 R
+/Prev 31 0 R
+/Next 59 0 R
+>> endobj
+51 0 obj <<
+/Title 52 0 R
+/A 49 0 R
+/Parent 31 0 R
+/Prev 47 0 R
+>> endobj
+47 0 obj <<
+/Title 48 0 R
+/A 45 0 R
+/Parent 31 0 R
+/Prev 43 0 R
+/Next 51 0 R
+>> endobj
+43 0 obj <<
+/Title 44 0 R
+/A 41 0 R
+/Parent 31 0 R
+/Prev 39 0 R
+/Next 47 0 R
+>> endobj
+39 0 obj <<
+/Title 40 0 R
+/A 37 0 R
+/Parent 31 0 R
+/Prev 35 0 R
+/Next 43 0 R
+>> endobj
+35 0 obj <<
+/Title 36 0 R
+/A 33 0 R
+/Parent 31 0 R
+/Next 39 0 R
+>> endobj
+31 0 obj <<
+/Title 32 0 R
+/A 29 0 R
+/Parent 27 0 R
+/Next 55 0 R
+/First 35 0 R
+/Last 51 0 R
+/Count -5
+>> endobj
+27 0 obj <<
+/Title 28 0 R
+/A 25 0 R
+/Parent 970 0 R
+/Prev 3 0 R
+/Next 123 0 R
+/First 31 0 R
+/Last 119 0 R
+/Count -7
+>> endobj
+23 0 obj <<
+/Title 24 0 R
+/A 21 0 R
+/Parent 3 0 R
+/Prev 19 0 R
+>> endobj
+19 0 obj <<
+/Title 20 0 R
+/A 17 0 R
+/Parent 3 0 R
+/Prev 15 0 R
+/Next 23 0 R
+>> endobj
+15 0 obj <<
+/Title 16 0 R
+/A 13 0 R
+/Parent 3 0 R
+/Prev 11 0 R
+/Next 19 0 R
+>> endobj
+11 0 obj <<
+/Title 12 0 R
+/A 9 0 R
+/Parent 3 0 R
+/Prev 7 0 R
+/Next 15 0 R
+>> endobj
+7 0 obj <<
+/Title 8 0 R
+/A 5 0 R
+/Parent 3 0 R
+/Next 11 0 R
+>> endobj
+3 0 obj <<
+/Title 4 0 R
+/A 1 0 R
+/Parent 970 0 R
+/Next 27 0 R
+/First 7 0 R
+/Last 23 0 R
+/Count -5
+>> endobj
+971 0 obj <<
+/Names [(Doc-Start) 322 0 R (chapter*.1) 332 0 R (chapter*.2) 375 0 R (chapter.1) 2 0 R (chapter.2) 26 0 R (chapter.3) 122 0 R]
+/Limits [(Doc-Start) (chapter.3)]
+>> endobj
+972 0 obj <<
+/Names [(chapter.4) 170 0 R (chapter.5) 198 0 R (chapter.6) 266 0 R (figure.2.1) 451 0 R (figure.5.1) 825 0 R (figure.5.2) 843 0 R]
+/Limits [(chapter.4) (figure.5.2)]
+>> endobj
+973 0 obj <<
+/Names [(figure.5.3) 861 0 R (figure.6.1) 893 0 R (figure.6.2) 894 0 R (page.1) 321 0 R (page.10) 503 0 R (page.11) 521 0 R]
+/Limits [(figure.5.3) (page.11)]
+>> endobj
+974 0 obj <<
+/Names [(page.12) 527 0 R (page.13) 545 0 R (page.14) 565 0 R (page.15) 584 0 R (page.16) 604 0 R (page.17) 627 0 R]
+/Limits [(page.12) (page.17)]
+>> endobj
+975 0 obj <<
+/Names [(page.18) 638 0 R (page.19) 643 0 R (page.2) 431 0 R (page.20) 650 0 R (page.21) 669 0 R (page.22) 692 0 R]
+/Limits [(page.18) (page.22)]
+>> endobj
+976 0 obj <<
+/Names [(page.23) 703 0 R (page.24) 709 0 R (page.25) 715 0 R (page.26) 720 0 R (page.27) 724 0 R (page.28) 731 0 R]
+/Limits [(page.23) (page.28)]
+>> endobj
+977 0 obj <<
+/Names [(page.29) 743 0 R (page.3) 435 0 R (page.30) 766 0 R (page.31) 777 0 R (page.32) 783 0 R (page.33) 801 0 R]
+/Limits [(page.29) (page.33)]
+>> endobj
+978 0 obj <<
+/Names [(page.34) 819 0 R (page.35) 824 0 R (page.36) 832 0 R (page.37) 836 0 R (page.38) 842 0 R (page.39) 847 0 R]
+/Limits [(page.34) (page.39)]
+>> endobj
+979 0 obj <<
+/Names [(page.4) 440 0 R (page.40) 854 0 R (page.41) 860 0 R (page.42) 865 0 R (page.43) 869 0 R (page.44) 873 0 R]
+/Limits [(page.4) (page.44)]
+>> endobj
+980 0 obj <<
+/Names [(page.45) 881 0 R (page.46) 886 0 R (page.47) 892 0 R (page.48) 898 0 R (page.49) 903 0 R (page.5) 444 0 R]
+/Limits [(page.45) (page.5)]
+>> endobj
+981 0 obj <<
+/Names [(page.50) 908 0 R (page.51) 920 0 R (page.52) 931 0 R (page.6) 450 0 R (page.7) 455 0 R (page.8) 462 0 R]
+/Limits [(page.50) (page.8)]
+>> endobj
+982 0 obj <<
+/Names [(page.9) 473 0 R (page.i) 330 0 R (page.ii) 374 0 R (page.iii) 423 0 R (section*.3) 693 0 R (section*.4) 704 0 R]
+/Limits [(page.9) (section*.4)]
+>> endobj
+983 0 obj <<
+/Names [(section*.5) 705 0 R (section*.6) 710 0 R (section*.7) 711 0 R (section.1.1) 6 0 R (section.1.2) 10 0 R (section.1.3) 14 0 R]
+/Limits [(section*.5) (section.1.3)]
+>> endobj
+984 0 obj <<
+/Names [(section.1.4) 18 0 R (section.1.5) 22 0 R (section.2.1) 30 0 R (section.2.2) 54 0 R (section.2.3) 58 0 R (section.2.4) 62 0 R]
+/Limits [(section.1.4) (section.2.4)]
+>> endobj
+985 0 obj <<
+/Names [(section.2.5) 66 0 R (section.2.6) 114 0 R (section.2.7) 118 0 R (section.3.1) 126 0 R (section.3.2) 146 0 R (section.3.3) 162 0 R]
+/Limits [(section.2.5) (section.3.3)]
+>> endobj
+986 0 obj <<
+/Names [(section.3.4) 166 0 R (section.4.1) 174 0 R (section.4.2) 178 0 R (section.5.1) 202 0 R (section.5.10) 258 0 R (section.5.11) 262 0 R]
+/Limits [(section.3.4) (section.5.11)]
+>> endobj
+987 0 obj <<
+/Names [(section.5.2) 206 0 R (section.5.3) 210 0 R (section.5.4) 214 0 R (section.5.5) 218 0 R (section.5.6) 222 0 R (section.5.7) 226 0 R]
+/Limits [(section.5.2) (section.5.7)]
+>> endobj
+988 0 obj <<
+/Names [(section.5.8) 230 0 R (section.5.9) 254 0 R (section.6.1) 270 0 R (section.6.2) 274 0 R (section.6.3) 278 0 R (section.6.4) 282 0 R]
+/Limits [(section.5.8) (section.6.4)]
+>> endobj
+989 0 obj <<
+/Names [(section.6.5) 306 0 R (section.6.6) 310 0 R (section.6.7) 314 0 R (subsection.2.1.1) 34 0 R (subsection.2.1.2) 38 0 R (subsection.2.1.3) 42 0 R]
+/Limits [(section.6.5) (subsection.2.1.3)]
+>> endobj
+990 0 obj <<
+/Names [(subsection.2.1.4) 46 0 R (subsection.2.1.5) 50 0 R (subsection.2.5.1) 70 0 R (subsection.2.5.10) 106 0 R (subsection.2.5.11) 110 0 R (subsection.2.5.2) 74 0 R]
+/Limits [(subsection.2.1.4) (subsection.2.5.2)]
+>> endobj
+991 0 obj <<
+/Names [(subsection.2.5.3) 78 0 R (subsection.2.5.4) 82 0 R (subsection.2.5.5) 86 0 R (subsection.2.5.6) 90 0 R (subsection.2.5.7) 94 0 R (subsection.2.5.8) 98 0 R]
+/Limits [(subsection.2.5.3) (subsection.2.5.8)]
+>> endobj
+992 0 obj <<
+/Names [(subsection.2.5.9) 102 0 R (subsection.3.1.1) 130 0 R (subsection.3.1.2) 134 0 R (subsection.3.1.3) 138 0 R (subsection.3.1.4) 142 0 R (subsection.3.2.1) 150 0 R]
+/Limits [(subsection.2.5.9) (subsection.3.2.1)]
+>> endobj
+993 0 obj <<
+/Names [(subsection.3.2.2) 154 0 R (subsection.3.2.3) 158 0 R (subsection.4.2.1) 182 0 R (subsection.4.2.2) 186 0 R (subsection.4.2.3) 190 0 R (subsection.4.2.4) 194 0 R]
+/Limits [(subsection.3.2.2) (subsection.4.2.4)]
+>> endobj
+994 0 obj <<
+/Names [(subsection.5.8.1) 234 0 R (subsection.5.8.2) 238 0 R (subsection.5.8.3) 242 0 R (subsection.5.8.4) 246 0 R (subsection.5.8.5) 250 0 R (subsection.6.4.1) 286 0 R]
+/Limits [(subsection.5.8.1) (subsection.6.4.1)]
+>> endobj
+995 0 obj <<
+/Names [(subsection.6.4.2) 290 0 R (subsection.6.4.3) 294 0 R (subsection.6.4.4) 298 0 R (subsection.6.4.5) 302 0 R]
+/Limits [(subsection.6.4.2) (subsection.6.4.5)]
+>> endobj
+996 0 obj <<
+/Kids [971 0 R 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R]
+/Limits [(Doc-Start) (page.28)]
+>> endobj
+997 0 obj <<
+/Kids [977 0 R 978 0 R 979 0 R 980 0 R 981 0 R 982 0 R]
+/Limits [(page.29) (section*.4)]
+>> endobj
+998 0 obj <<
+/Kids [983 0 R 984 0 R 985 0 R 986 0 R 987 0 R 988 0 R]
+/Limits [(section*.5) (section.6.4)]
+>> endobj
+999 0 obj <<
+/Kids [989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 994 0 R]
+/Limits [(section.6.5) (subsection.6.4.1)]
+>> endobj
+1000 0 obj <<
+/Kids [995 0 R]
+/Limits [(subsection.6.4.2) (subsection.6.4.5)]
+>> endobj
+1001 0 obj <<
+/Kids [996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R]
+/Limits [(Doc-Start) (subsection.6.4.5)]
+>> endobj
+1002 0 obj <<
+/Dests 1001 0 R
+>> endobj
+1003 0 obj <<
+/Type /Catalog
+/Pages 969 0 R
+/Outlines 970 0 R
+/Names 1002 0 R
+/PageMode/UseOutlines/PageLabels<</Nums[0<</S/D>>1<</S/r>>4<</S/D>>]>>
+/OpenAction 317 0 R
+>> endobj
+1004 0 obj <<
+/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.10)/Keywords()
+/CreationDate (D:20130211201216-05'00')
+/ModDate (D:20130211201216-05'00')
+/Trapped /False
+/PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0)
+>> endobj
+xref
+0 1005
+0000000000 65535 f
+0000000015 00000 n
+0000028015 00000 n
+0000611314 00000 n
+0000000060 00000 n
+0000000090 00000 n
+0000028070 00000 n
+0000611244 00000 n
+0000000137 00000 n
+0000000163 00000 n
+0000028125 00000 n
+0000611160 00000 n
+0000000210 00000 n
+0000000239 00000 n
+0000031723 00000 n
+0000611074 00000 n
+0000000287 00000 n
+0000000314 00000 n
+0000039089 00000 n
+0000610988 00000 n
+0000000362 00000 n
+0000000393 00000 n
+0000041438 00000 n
+0000610915 00000 n
+0000000441 00000 n
+0000000478 00000 n
+0000043824 00000 n
+0000610789 00000 n
+0000000524 00000 n
+0000000570 00000 n
+0000043880 00000 n
+0000610678 00000 n
+0000000618 00000 n
+0000000671 00000 n
+0000046690 00000 n
+0000610604 00000 n
+0000000724 00000 n
+0000000762 00000 n
+0000046746 00000 n
+0000610517 00000 n
+0000000815 00000 n
+0000000852 00000 n
+0000046802 00000 n
+0000610430 00000 n
+0000000905 00000 n
+0000000945 00000 n
+0000046858 00000 n
+0000610343 00000 n
+0000000998 00000 n
+0000001037 00000 n
+0000046914 00000 n
+0000610269 00000 n
+0000001090 00000 n
+0000001130 00000 n
+0000050123 00000 n
+0000610182 00000 n
+0000001178 00000 n
+0000001230 00000 n
+0000050179 00000 n
+0000610095 00000 n
+0000001278 00000 n
+0000001311 00000 n
+0000081584 00000 n
+0000610008 00000 n
+0000001359 00000 n
+0000001397 00000 n
+0000081640 00000 n
+0000609881 00000 n
+0000001445 00000 n
+0000001490 00000 n
+0000098826 00000 n
+0000609807 00000 n
+0000001543 00000 n
+0000001567 00000 n
+0000098882 00000 n
+0000609720 00000 n
+0000001620 00000 n
+0000001651 00000 n
+0000128510 00000 n
+0000609633 00000 n
+0000001704 00000 n
+0000001733 00000 n
+0000128566 00000 n
+0000609546 00000 n
+0000001786 00000 n
+0000001822 00000 n
+0000143024 00000 n
+0000609459 00000 n
+0000001875 00000 n
+0000001907 00000 n
+0000174105 00000 n
+0000609372 00000 n
+0000001960 00000 n
+0000001990 00000 n
+0000189788 00000 n
+0000609285 00000 n
+0000002043 00000 n
+0000002084 00000 n
+0000189844 00000 n
+0000609196 00000 n
+0000002137 00000 n
+0000002165 00000 n
+0000196396 00000 n
+0000609105 00000 n
+0000002219 00000 n
+0000002249 00000 n
+0000196453 00000 n
+0000609013 00000 n
+0000002304 00000 n
+0000002332 00000 n
+0000196510 00000 n
+0000608935 00000 n
+0000002387 00000 n
+0000002431 00000 n
+0000196567 00000 n
+0000608844 00000 n
+0000002480 00000 n
+0000002526 00000 n
+0000196624 00000 n
+0000608766 00000 n
+0000002575 00000 n
+0000002608 00000 n
+0000200301 00000 n
+0000608635 00000 n
+0000002655 00000 n
+0000002687 00000 n
+0000200358 00000 n
+0000608517 00000 n
+0000002736 00000 n
+0000002773 00000 n
+0000200415 00000 n
+0000608438 00000 n
+0000002827 00000 n
+0000002862 00000 n
+0000212024 00000 n
+0000608345 00000 n
+0000002916 00000 n
+0000002952 00000 n
+0000212081 00000 n
+0000608252 00000 n
+0000003006 00000 n
+0000003047 00000 n
+0000228189 00000 n
+0000608173 00000 n
+0000003101 00000 n
+0000003136 00000 n
+0000237932 00000 n
+0000608041 00000 n
+0000003185 00000 n
+0000003237 00000 n
+0000237989 00000 n
+0000607962 00000 n
+0000003291 00000 n
+0000003342 00000 n
+0000240583 00000 n
+0000607869 00000 n
+0000003396 00000 n
+0000003427 00000 n
+0000240640 00000 n
+0000607790 00000 n
+0000003481 00000 n
+0000003516 00000 n
+0000246120 00000 n
+0000607697 00000 n
+0000003565 00000 n
+0000003615 00000 n
+0000246177 00000 n
+0000607618 00000 n
+0000003664 00000 n
+0000003730 00000 n
+0000269065 00000 n
+0000607486 00000 n
+0000003777 00000 n
+0000003823 00000 n
+0000315668 00000 n
+0000607407 00000 n
+0000003872 00000 n
+0000003902 00000 n
+0000319095 00000 n
+0000607289 00000 n
+0000003951 00000 n
+0000004016 00000 n
+0000334048 00000 n
+0000607210 00000 n
+0000004070 00000 n
+0000004117 00000 n
+0000334105 00000 n
+0000607117 00000 n
+0000004171 00000 n
+0000004219 00000 n
+0000357426 00000 n
+0000607024 00000 n
+0000004273 00000 n
+0000004319 00000 n
+0000357483 00000 n
+0000606945 00000 n
+0000004373 00000 n
+0000004418 00000 n
+0000361798 00000 n
+0000606812 00000 n
+0000004465 00000 n
+0000004510 00000 n
+0000361855 00000 n
+0000606733 00000 n
+0000004559 00000 n
+0000004602 00000 n
+0000367148 00000 n
+0000606640 00000 n
+0000004651 00000 n
+0000004689 00000 n
+0000367205 00000 n
+0000606547 00000 n
+0000004738 00000 n
+0000004774 00000 n
+0000367262 00000 n
+0000606454 00000 n
+0000004823 00000 n
+0000004859 00000 n
+0000370027 00000 n
+0000606361 00000 n
+0000004908 00000 n
+0000004946 00000 n
+0000370084 00000 n
+0000606268 00000 n
+0000004995 00000 n
+0000005033 00000 n
+0000370141 00000 n
+0000606175 00000 n
+0000005082 00000 n
+0000005120 00000 n
+0000370198 00000 n
+0000606043 00000 n
+0000005169 00000 n
+0000005204 00000 n
+0000370255 00000 n
+0000605964 00000 n
+0000005258 00000 n
+0000005288 00000 n
+0000372826 00000 n
+0000605871 00000 n
+0000005342 00000 n
+0000005396 00000 n
+0000375956 00000 n
+0000605778 00000 n
+0000005450 00000 n
+0000005480 00000 n
+0000376013 00000 n
+0000605685 00000 n
+0000005534 00000 n
+0000005564 00000 n
+0000376070 00000 n
+0000605606 00000 n
+0000005618 00000 n
+0000005651 00000 n
+0000379628 00000 n
+0000605513 00000 n
+0000005700 00000 n
+0000005754 00000 n
+0000379685 00000 n
+0000605420 00000 n
+0000005804 00000 n
+0000005852 00000 n
+0000382228 00000 n
+0000605341 00000 n
+0000005902 00000 n
+0000005953 00000 n
+0000386931 00000 n
+0000605223 00000 n
+0000006000 00000 n
+0000006042 00000 n
+0000386988 00000 n
+0000605144 00000 n
+0000006091 00000 n
+0000006132 00000 n
+0000391141 00000 n
+0000605051 00000 n
+0000006181 00000 n
+0000006218 00000 n
+0000391198 00000 n
+0000604958 00000 n
+0000006267 00000 n
+0000006295 00000 n
+0000397643 00000 n
+0000604826 00000 n
+0000006344 00000 n
+0000006376 00000 n
+0000402699 00000 n
+0000604747 00000 n
+0000006430 00000 n
+0000006454 00000 n
+0000402756 00000 n
+0000604654 00000 n
+0000006508 00000 n
+0000006533 00000 n
+0000402813 00000 n
+0000604561 00000 n
+0000006587 00000 n
+0000006614 00000 n
+0000402870 00000 n
+0000604468 00000 n
+0000006668 00000 n
+0000006712 00000 n
+0000415941 00000 n
+0000604389 00000 n
+0000006766 00000 n
+0000006824 00000 n
+0000415998 00000 n
+0000604296 00000 n
+0000006873 00000 n
+0000006912 00000 n
+0000442675 00000 n
+0000604203 00000 n
+0000006961 00000 n
+0000007003 00000 n
+0000442732 00000 n
+0000604124 00000 n
+0000007052 00000 n
+0000007109 00000 n
+0000007456 00000 n
+0000007680 00000 n
+0000007161 00000 n
+0000007568 00000 n
+0000007623 00000 n
+0000601905 00000 n
+0000601762 00000 n
+0000601619 00000 n
+0000602621 00000 n
+0000008966 00000 n
+0000008742 00000 n
+0000007778 00000 n
+0000008854 00000 n
+0000601331 00000 n
+0000008909 00000 n
+0000602191 00000 n
+0000602333 00000 n
+0000010736 00000 n
+0000010886 00000 n
+0000011039 00000 n
+0000011192 00000 n
+0000011345 00000 n
+0000011497 00000 n
+0000011650 00000 n
+0000011801 00000 n
+0000011954 00000 n
+0000012113 00000 n
+0000012272 00000 n
+0000012431 00000 n
+0000012590 00000 n
+0000012748 00000 n
+0000012900 00000 n
+0000013052 00000 n
+0000013204 00000 n
+0000013357 00000 n
+0000013516 00000 n
+0000013675 00000 n
+0000013834 00000 n
+0000013993 00000 n
+0000014152 00000 n
+0000014311 00000 n
+0000014470 00000 n
+0000014629 00000 n
+0000014787 00000 n
+0000014946 00000 n
+0000015106 00000 n
+0000015259 00000 n
+0000015412 00000 n
+0000015563 00000 n
+0000015714 00000 n
+0000015872 00000 n
+0000016029 00000 n
+0000018524 00000 n
+0000016303 00000 n
+0000010332 00000 n
+0000009077 00000 n
+0000016186 00000 n
+0000016246 00000 n
+0000601187 00000 n
+0000018683 00000 n
+0000018836 00000 n
+0000018994 00000 n
+0000019153 00000 n
+0000019311 00000 n
+0000019464 00000 n
+0000019617 00000 n
+0000019768 00000 n
+0000019920 00000 n
+0000020073 00000 n
+0000020232 00000 n
+0000020390 00000 n
+0000020548 00000 n
+0000020706 00000 n
+0000020857 00000 n
+0000021010 00000 n
+0000021163 00000 n
+0000021316 00000 n
+0000021469 00000 n
+0000021622 00000 n
+0000021775 00000 n
+0000021928 00000 n
+0000022081 00000 n
+0000022239 00000 n
+0000022397 00000 n
+0000022556 00000 n
+0000022714 00000 n
+0000022872 00000 n
+0000023025 00000 n
+0000023179 00000 n
+0000023332 00000 n
+0000023483 00000 n
+0000023636 00000 n
+0000023789 00000 n
+0000023940 00000 n
+0000024093 00000 n
+0000024252 00000 n
+0000024411 00000 n
+0000024570 00000 n
+0000024729 00000 n
+0000024888 00000 n
+0000025041 00000 n
+0000025192 00000 n
+0000025398 00000 n
+0000018048 00000 n
+0000016401 00000 n
+0000025343 00000 n
+0000602048 00000 n
+0000028181 00000 n
+0000027903 00000 n
+0000025496 00000 n
+0000031779 00000 n
+0000031551 00000 n
+0000028266 00000 n
+0000031663 00000 n
+0000035457 00000 n
+0000035290 00000 n
+0000031877 00000 n
+0000035402 00000 n
+0000602738 00000 n
+0000039145 00000 n
+0000038917 00000 n
+0000035542 00000 n
+0000039029 00000 n
+0000041494 00000 n
+0000041271 00000 n
+0000039243 00000 n
+0000041383 00000 n
+0000602477 00000 n
+0000043614 00000 n
+0000043998 00000 n
+0000043482 00000 n
+0000041605 00000 n
+0000043764 00000 n
+0000043936 00000 n
+0000046969 00000 n
+0000046523 00000 n
+0000044096 00000 n
+0000046635 00000 n
+0000049751 00000 n
+0000049909 00000 n
+0000064309 00000 n
+0000050235 00000 n
+0000049611 00000 n
+0000047080 00000 n
+0000050063 00000 n
+0000053232 00000 n
+0000064461 00000 n
+0000056942 00000 n
+0000059888 00000 n
+0000061926 00000 n
+0000064615 00000 n
+0000077170 00000 n
+0000064822 00000 n
+0000053084 00000 n
+0000050359 00000 n
+0000064767 00000 n
+0000602855 00000 n
+0000054450 00000 n
+0000054648 00000 n
+0000054695 00000 n
+0000055029 00000 n
+0000055325 00000 n
+0000055425 00000 n
+0000057752 00000 n
+0000057946 00000 n
+0000057993 00000 n
+0000058337 00000 n
+0000058627 00000 n
+0000058727 00000 n
+0000060583 00000 n
+0000060779 00000 n
+0000060826 00000 n
+0000061064 00000 n
+0000061303 00000 n
+0000062722 00000 n
+0000062917 00000 n
+0000062964 00000 n
+0000063208 00000 n
+0000063460 00000 n
+0000067366 00000 n
+0000074375 00000 n
+0000077321 00000 n
+0000077538 00000 n
+0000067226 00000 n
+0000065000 00000 n
+0000077478 00000 n
+0000071619 00000 n
+0000071816 00000 n
+0000071863 00000 n
+0000072223 00000 n
+0000072522 00000 n
+0000072622 00000 n
+0000075176 00000 n
+0000075373 00000 n
+0000075420 00000 n
+0000075766 00000 n
+0000076045 00000 n
+0000076145 00000 n
+0000081381 00000 n
+0000098615 00000 n
+0000081696 00000 n
+0000081249 00000 n
+0000077703 00000 n
+0000081529 00000 n
+0000083390 00000 n
+0000088564 00000 n
+0000098938 00000 n
+0000083258 00000 n
+0000081807 00000 n
+0000098766 00000 n
+0000087158 00000 n
+0000087352 00000 n
+0000087399 00000 n
+0000087561 00000 n
+0000087789 00000 n
+0000087887 00000 n
+0000095492 00000 n
+0000095686 00000 n
+0000095733 00000 n
+0000096117 00000 n
+0000096445 00000 n
+0000096545 00000 n
+0000100798 00000 n
+0000108015 00000 n
+0000128622 00000 n
+0000100686 00000 n
+0000099090 00000 n
+0000128455 00000 n
+0000105635 00000 n
+0000105832 00000 n
+0000105879 00000 n
+0000106249 00000 n
+0000106557 00000 n
+0000106657 00000 n
+0000124086 00000 n
+0000124283 00000 n
+0000124330 00000 n
+0000124734 00000 n
+0000125078 00000 n
+0000125178 00000 n
+0000131012 00000 n
+0000137864 00000 n
+0000142805 00000 n
+0000145420 00000 n
+0000143080 00000 n
+0000130880 00000 n
+0000128775 00000 n
+0000142964 00000 n
+0000135202 00000 n
+0000135405 00000 n
+0000135452 00000 n
+0000135812 00000 n
+0000136118 00000 n
+0000136218 00000 n
+0000141395 00000 n
+0000141593 00000 n
+0000141640 00000 n
+0000141802 00000 n
+0000142030 00000 n
+0000142128 00000 n
+0000168049 00000 n
+0000173749 00000 n
+0000173899 00000 n
+0000174161 00000 n
+0000145280 00000 n
+0000143234 00000 n
+0000174050 00000 n
+0000602972 00000 n
+0000165540 00000 n
+0000165738 00000 n
+0000165785 00000 n
+0000166054 00000 n
+0000166336 00000 n
+0000166436 00000 n
+0000172341 00000 n
+0000172537 00000 n
+0000172584 00000 n
+0000172746 00000 n
+0000172974 00000 n
+0000173072 00000 n
+0000175822 00000 n
+0000181233 00000 n
+0000185222 00000 n
+0000189900 00000 n
+0000175710 00000 n
+0000174328 00000 n
+0000189728 00000 n
+0000179240 00000 n
+0000179436 00000 n
+0000179483 00000 n
+0000179829 00000 n
+0000180108 00000 n
+0000180208 00000 n
+0000182865 00000 n
+0000183061 00000 n
+0000183108 00000 n
+0000183478 00000 n
+0000183780 00000 n
+0000183880 00000 n
+0000187717 00000 n
+0000187915 00000 n
+0000187962 00000 n
+0000188221 00000 n
+0000188497 00000 n
+0000188597 00000 n
+0000192211 00000 n
+0000196680 00000 n
+0000192099 00000 n
+0000190081 00000 n
+0000196341 00000 n
+0000601475 00000 n
+0000193888 00000 n
+0000194086 00000 n
+0000194133 00000 n
+0000194422 00000 n
+0000194734 00000 n
+0000194843 00000 n
+0000197846 00000 n
+0000197674 00000 n
+0000196846 00000 n
+0000197786 00000 n
+0000200092 00000 n
+0000200472 00000 n
+0000199960 00000 n
+0000197944 00000 n
+0000200246 00000 n
+0000202168 00000 n
+0000208243 00000 n
+0000214136 00000 n
+0000212138 00000 n
+0000202056 00000 n
+0000200583 00000 n
+0000211964 00000 n
+0000205672 00000 n
+0000205869 00000 n
+0000205916 00000 n
+0000206288 00000 n
+0000206591 00000 n
+0000206691 00000 n
+0000209809 00000 n
+0000210008 00000 n
+0000210055 00000 n
+0000210421 00000 n
+0000210715 00000 n
+0000210815 00000 n
+0000217213 00000 n
+0000221130 00000 n
+0000230799 00000 n
+0000228246 00000 n
+0000214024 00000 n
+0000212292 00000 n
+0000228134 00000 n
+0000603089 00000 n
+0000215057 00000 n
+0000215255 00000 n
+0000215302 00000 n
+0000215642 00000 n
+0000215938 00000 n
+0000216038 00000 n
+0000218878 00000 n
+0000219077 00000 n
+0000219124 00000 n
+0000219492 00000 n
+0000219790 00000 n
+0000219890 00000 n
+0000224466 00000 n
+0000224665 00000 n
+0000224712 00000 n
+0000225108 00000 n
+0000225444 00000 n
+0000225544 00000 n
+0000238103 00000 n
+0000230687 00000 n
+0000228414 00000 n
+0000237872 00000 n
+0000238046 00000 n
+0000235101 00000 n
+0000235299 00000 n
+0000235346 00000 n
+0000235724 00000 n
+0000236047 00000 n
+0000236147 00000 n
+0000240754 00000 n
+0000240359 00000 n
+0000238269 00000 n
+0000240471 00000 n
+0000240526 00000 n
+0000240697 00000 n
+0000243439 00000 n
+0000243153 00000 n
+0000240878 00000 n
+0000243265 00000 n
+0000243325 00000 n
+0000243382 00000 n
+0000246234 00000 n
+0000245953 00000 n
+0000243550 00000 n
+0000246065 00000 n
+0000249719 00000 n
+0000249931 00000 n
+0000249587 00000 n
+0000246358 00000 n
+0000249871 00000 n
+0000251879 00000 n
+0000251712 00000 n
+0000250042 00000 n
+0000251824 00000 n
+0000603206 00000 n
+0000254033 00000 n
+0000271641 00000 n
+0000269122 00000 n
+0000253921 00000 n
+0000252003 00000 n
+0000269005 00000 n
+0000265758 00000 n
+0000265954 00000 n
+0000266001 00000 n
+0000266389 00000 n
+0000266726 00000 n
+0000266826 00000 n
+0000282298 00000 n
+0000298648 00000 n
+0000305608 00000 n
+0000271529 00000 n
+0000269249 00000 n
+0000305553 00000 n
+0000279239 00000 n
+0000279435 00000 n
+0000279482 00000 n
+0000279866 00000 n
+0000280193 00000 n
+0000280293 00000 n
+0000295552 00000 n
+0000295751 00000 n
+0000295798 00000 n
+0000296156 00000 n
+0000296478 00000 n
+0000296578 00000 n
+0000302580 00000 n
+0000302779 00000 n
+0000302826 00000 n
+0000303182 00000 n
+0000303499 00000 n
+0000303599 00000 n
+0000308578 00000 n
+0000315725 00000 n
+0000308466 00000 n
+0000305763 00000 n
+0000315608 00000 n
+0000312537 00000 n
+0000312739 00000 n
+0000312786 00000 n
+0000313172 00000 n
+0000313501 00000 n
+0000313601 00000 n
+0000318888 00000 n
+0000319152 00000 n
+0000318756 00000 n
+0000315878 00000 n
+0000319040 00000 n
+0000321207 00000 n
+0000325196 00000 n
+0000334162 00000 n
+0000321095 00000 n
+0000319318 00000 n
+0000333988 00000 n
+0000323011 00000 n
+0000323211 00000 n
+0000323258 00000 n
+0000323519 00000 n
+0000323789 00000 n
+0000323889 00000 n
+0000331805 00000 n
+0000332003 00000 n
+0000332050 00000 n
+0000332311 00000 n
+0000332581 00000 n
+0000332681 00000 n
+0000335929 00000 n
+0000346167 00000 n
+0000357540 00000 n
+0000335817 00000 n
+0000334316 00000 n
+0000357371 00000 n
+0000603323 00000 n
+0000342885 00000 n
+0000343084 00000 n
+0000343131 00000 n
+0000343519 00000 n
+0000343838 00000 n
+0000343938 00000 n
+0000354803 00000 n
+0000355001 00000 n
+0000355048 00000 n
+0000355422 00000 n
+0000355735 00000 n
+0000355835 00000 n
+0000358550 00000 n
+0000358764 00000 n
+0000358418 00000 n
+0000357694 00000 n
+0000358704 00000 n
+0000361591 00000 n
+0000361912 00000 n
+0000361459 00000 n
+0000358849 00000 n
+0000361743 00000 n
+0000364903 00000 n
+0000364384 00000 n
+0000364538 00000 n
+0000364691 00000 n
+0000364965 00000 n
+0000364236 00000 n
+0000362023 00000 n
+0000364843 00000 n
+0000367319 00000 n
+0000366981 00000 n
+0000365076 00000 n
+0000367093 00000 n
+0000369659 00000 n
+0000369812 00000 n
+0000370312 00000 n
+0000369519 00000 n
+0000367443 00000 n
+0000369967 00000 n
+0000372764 00000 n
+0000372883 00000 n
+0000372597 00000 n
+0000370423 00000 n
+0000372709 00000 n
+0000603440 00000 n
+0000375743 00000 n
+0000379107 00000 n
+0000376127 00000 n
+0000375611 00000 n
+0000373007 00000 n
+0000375896 00000 n
+0000379266 00000 n
+0000379420 00000 n
+0000379742 00000 n
+0000378959 00000 n
+0000376238 00000 n
+0000379573 00000 n
+0000382166 00000 n
+0000382285 00000 n
+0000381994 00000 n
+0000379866 00000 n
+0000382106 00000 n
+0000384864 00000 n
+0000384697 00000 n
+0000382396 00000 n
+0000384809 00000 n
+0000387045 00000 n
+0000386759 00000 n
+0000384975 00000 n
+0000386871 00000 n
+0000390476 00000 n
+0000390630 00000 n
+0000390784 00000 n
+0000390937 00000 n
+0000391255 00000 n
+0000390320 00000 n
+0000387143 00000 n
+0000391086 00000 n
+0000603557 00000 n
+0000394358 00000 n
+0000394186 00000 n
+0000391366 00000 n
+0000394298 00000 n
+0000397220 00000 n
+0000397373 00000 n
+0000397700 00000 n
+0000397080 00000 n
+0000394456 00000 n
+0000397526 00000 n
+0000397581 00000 n
+0000399421 00000 n
+0000399483 00000 n
+0000399249 00000 n
+0000397837 00000 n
+0000399361 00000 n
+0000402494 00000 n
+0000402927 00000 n
+0000402362 00000 n
+0000399581 00000 n
+0000402644 00000 n
+0000405335 00000 n
+0000416054 00000 n
+0000405223 00000 n
+0000403038 00000 n
+0000415881 00000 n
+0000412689 00000 n
+0000412887 00000 n
+0000412934 00000 n
+0000413304 00000 n
+0000413642 00000 n
+0000413742 00000 n
+0000418386 00000 n
+0000430330 00000 n
+0000427456 00000 n
+0000418274 00000 n
+0000416194 00000 n
+0000427401 00000 n
+0000603674 00000 n
+0000423749 00000 n
+0000423945 00000 n
+0000423992 00000 n
+0000424389 00000 n
+0000424762 00000 n
+0000442456 00000 n
+0000442789 00000 n
+0000430198 00000 n
+0000427596 00000 n
+0000442615 00000 n
+0000438959 00000 n
+0000439155 00000 n
+0000439202 00000 n
+0000439601 00000 n
+0000439976 00000 n
+0000442929 00000 n
+0000443138 00000 n
+0000443533 00000 n
+0000443779 00000 n
+0000444234 00000 n
+0000444891 00000 n
+0000444985 00000 n
+0000445632 00000 n
+0000446259 00000 n
+0000446549 00000 n
+0000446864 00000 n
+0000464373 00000 n
+0000464723 00000 n
+0000483168 00000 n
+0000483561 00000 n
+0000491493 00000 n
+0000491725 00000 n
+0000516395 00000 n
+0000516908 00000 n
+0000526428 00000 n
+0000526674 00000 n
+0000536873 00000 n
+0000537123 00000 n
+0000549761 00000 n
+0000550053 00000 n
+0000557491 00000 n
+0000557740 00000 n
+0000577759 00000 n
+0000578150 00000 n
+0000600548 00000 n
+0000603759 00000 n
+0000603877 00000 n
+0000603979 00000 n
+0000604049 00000 n
+0000611422 00000 n
+0000611607 00000 n
+0000611797 00000 n
+0000611978 00000 n
+0000612148 00000 n
+0000612317 00000 n
+0000612487 00000 n
+0000612656 00000 n
+0000612826 00000 n
+0000612994 00000 n
+0000613162 00000 n
+0000613328 00000 n
+0000613505 00000 n
+0000613699 00000 n
+0000613895 00000 n
+0000614096 00000 n
+0000614301 00000 n
+0000614503 00000 n
+0000614705 00000 n
+0000614924 00000 n
+0000615164 00000 n
+0000615400 00000 n
+0000615642 00000 n
+0000615884 00000 n
+0000616126 00000 n
+0000616314 00000 n
+0000616425 00000 n
+0000616537 00000 n
+0000616653 00000 n
+0000616775 00000 n
+0000616863 00000 n
+0000616977 00000 n
+0000617017 00000 n
+0000617196 00000 n
+trailer
+<< /Size 1005
+/Root 1003 0 R
+/Info 1004 0 R
+/ID [<C1409493E77AB4A125F00CCA8D4CC8C8> <C1409493E77AB4A125F00CCA8D4CC8C8>] >>
+startxref
+617523
+%%EOF
diff --git a/doc/ragel-guide.tex b/doc/ragel-guide.tex
index 4cca738..fab8a51 100644
--- a/doc/ragel-guide.tex
+++ b/doc/ragel-guide.tex
@@ -134,7 +134,7 @@ maximally continuous. One is free to specify an entire parser using a single
regular expression. The single-expression model affords concise and elegant
descriptions of languages and the generation of very simple, fast and robust
code. Ragel compiles executable finite state machines from a high level regular language
-notation. Ragel targets C, C++, Objective-C, D, Java and Ruby.
+notation. Ragel targets C, C++, Objective-C, D, Go, Java and Ruby.
In addition to building state machines from regular expressions, Ragel allows
the programmer to directly specify state machines with state charts. These two
@@ -199,7 +199,7 @@ deterministic finite state automaton. Since every regular language has a state
machine representation and vice versa, the terms regular language and state
machine (or just machine) will be used interchangeably in this document.
-Ragel outputs machines to C, C++, Objective-C, D, Java or Ruby code. The output is
+Ragel outputs machines to C, C++, Objective-C, D, Go, Java or Ruby code. The output is
designed to be generic and is not bound to any particular input or processing
method. A Ragel machine expects to have data passed to it in buffer blocks.
When there is no more input, the machine can be queried for acceptance. In
@@ -2503,7 +2503,7 @@ stream. These can live in any scope. Control of the input processing loop is
also possible: the user may break out of the processing loop and return to it
at any time.
-In the case of C and D host languages, Ragel is able to generate very
+In the case of the C, D, and Go host languages, Ragel is able to generate very
fast-running code that implements state machines as directly executable code.
Since very large files strain the host language compiler, table-based code
generation is also supported. In the future we hope to provide a partitioned,
@@ -2561,7 +2561,7 @@ int main( int argc, char **argv )
There are a number of variables that Ragel expects the user to declare. At a
very minimum the \verb|cs|, \verb|p| and \verb|pe| variables must be declared.
-In Java and Ruby code the \verb|data| variable must also be declared. If
+In Go, Java and Ruby code the \verb|data| variable must also be declared. If
EOF actions are used then the \verb|eof| variable is required. If
stack-based state machine control flow statements are used then the
\verb|stack| and \verb|top| variables are required. If a scanner is declared
@@ -2577,21 +2577,21 @@ execution loop, but not from within.
\item \verb|p| - Data pointer. In C/D code this variable is expected to be a
pointer to the character data to process. It should be initialized to the
-beginning of the data block on every run of the machine. In Java and Ruby it is
+beginning of the data block on every run of the machine. In Go, Java and Ruby it is
used as an offset to \verb|data| and must be an integer. In this case it should
be initialized to zero on every run of the machine.
\item \verb|pe| - Data end pointer. This should be initialized to \verb|p| plus
-the data length on every run of the machine. In Java and Ruby code this should
+the data length on every run of the machine. In Go, Java and Ruby code this should
be initialized to the data length.
\item \verb|eof| - End of file pointer. This should be set to \verb|pe| when
the buffer block being processed is the last one, otherwise it should be set to
-null. In Java and Ruby code \verb|-1| must be used instead of null. If the EOF
+null. In Go, Java and Ruby code \verb|-1| must be used instead of null. If the EOF
event can be known only after the final buffer block has been processed, then
it is possible to set \verb|p = pe = eof| and run the execute block.
-\item \verb|data| - This variable is only required in Java and Ruby code. It
+\item \verb|data| - This variable is only required in Go, Java and Ruby code. It
must be an array containting the data to process.
\item \verb|stack| - This must be an array of integers. It is used to store
@@ -2605,7 +2605,7 @@ to \verb|stack|, giving the next available spot on the top of the stack.
\item \verb|act| - This must be an integer value. It is a variable sometimes
used by scanner code to keep track of the most recent successful pattern match.
-\item \verb|ts| - This must be a pointer to character data. In Java and
+\item \verb|ts| - This must be a pointer to character data. In Go, Java and
Ruby code this must be an integer. See Section \ref{generating-scanners} for
more information.
@@ -2623,7 +2623,7 @@ alphtype unsigned int;
The alphtype statement specifies the alphabet data type that the machine
operates on. During the compilation of the machine, integer literals are
expected to be in the range of possible values of the alphtype. The default
-is always \verb|char|.
+is \verb|char| for all languages except Go where the default is \verb|byte|.
\begin{multicols}{2}
\setlength{\columnseprule}{1pt}
@@ -2635,6 +2635,24 @@ C/C++/Objective-C:
long unsigned long
\end{verbatim}
+Go:
+\begin{verbatim}
+ byte
+ int8 uint8
+ int16 uint16
+ int32 uint32
+ int64 uint64
+ rune
+\end{verbatim}
+
+Ruby:
+\begin{verbatim}
+ char
+ int
+\end{verbatim}
+
+\columnbreak
+
Java:
\begin{verbatim}
char
@@ -2643,9 +2661,6 @@ Java:
int
\end{verbatim}
-
-\columnbreak
-
D:
\begin{verbatim}
char
@@ -2656,11 +2671,6 @@ D:
dchar
\end{verbatim}
-Ruby:
-\begin{verbatim}
- char
- int
-\end{verbatim}
\end{multicols}
\section{Getkey Statement}
@@ -2705,7 +2715,7 @@ The variable statement specifies how to access a specific
variable. All of the variables that are declared by the user and
used by Ragel can be changed. This includes \verb|p|, \verb|pe|, \verb|eof|, \verb|cs|,
\verb|top|, \verb|stack|, \verb|ts|, \verb|te| and \verb|act|.
-In Ruby and Java code generation the \verb|data| variable can also be changed.
+In Go, Ruby and Java code generation the \verb|data| variable can also be changed.
\section{Pre-Push Statement}
\label{prepush}
@@ -3008,6 +3018,7 @@ language. The host-language options are:
\begin{itemize}
\item \verb|-C | for C/C++/Objective-C code (default)
\item \verb|-D | for D code.
+\item \verb|-Z | for Go code.
\item \verb|-J | for Java code.
\item \verb|-R | for Ruby code.
\item \verb|-A | for C\# code.
@@ -3074,19 +3085,19 @@ preferred output format.
\hline
\multicolumn{3}{|c|}{\bf Code Output Style Options} \\
\hline
-\verb|-T0|&binary search table-driven&C/D/Java/Ruby/C\#\\
+\verb|-T0|&binary search table-driven&C/D/Java/Ruby/C\#/Go\\
\hline
-\verb|-T1|&binary search, expanded actions&C/D/Ruby/C\#\\
+\verb|-T1|&binary search, expanded actions&C/D/Ruby/C\#/Go\\
\hline
-\verb|-F0|&flat table-driven&C/D/Ruby/C\#\\
+\verb|-F0|&flat table-driven&C/D/Ruby/C\#/Go\\
\hline
-\verb|-F1|&flat table, expanded actions&C/D/Ruby/C\#\\
+\verb|-F1|&flat table, expanded actions&C/D/Ruby/C\#/Go\\
\hline
-\verb|-G0|&goto-driven&C/D/C\#\\
+\verb|-G0|&goto-driven&C/D/C\#/Go\\
\hline
-\verb|-G1|&goto, expanded actions&C/D/C\#\\
+\verb|-G1|&goto, expanded actions&C/D/C\#/Go\\
\hline
-\verb|-G2|&goto, in-place actions&C/D\\
+\verb|-G2|&goto, in-place actions&C/D/Go\\
\hline
\end{tabular}
\end{center}
@@ -3569,7 +3580,8 @@ context-dependent nature. The prevalence of variable-length fields in
communication protocols motivated us to introduce semantic conditions into
the Ragel language.
-A semantic condition is a block of user code that is executed immediately
+A semantic condition is a block of user code that is interpreted as an
+expression and evaluated immediately
before a transition is taken. If the code returns a value of true, the
transition may be taken. We can now embed code that extracts the length of a
field, then proceed to match $n$ data values.
diff --git a/doc/ragel.1.in b/doc/ragel.1.in
index cfcc0f5..ca58f6e 100644
--- a/doc/ragel.1.in
+++ b/doc/ragel.1.in
@@ -30,7 +30,7 @@ ragel \- compile regular languages into executable state machines
.I file
.SH DESCRIPTION
Ragel compiles executable finite state machines from regular languages.
-Ragel can generate C, C++, Objective-C, D, or Java code. Ragel state
+Ragel can generate C, C++, Objective-C, D, Go, or Java code. Ragel state
machines can not only recognize byte
sequences as regular expression machines do, but can also execute code at
arbitrary points in the recognition of a regular language. User code is
@@ -118,6 +118,9 @@ The host language is D.
.B \-J
The host language is Java.
.TP
+.B \-Z
+The host language is Go.
+.TP
.B \-R
The host language is Ruby.
.TP
@@ -125,7 +128,7 @@ The host language is Ruby.
Inhibit writing of #line directives.
.TP
.B \-T0
-(C/D/Java/Ruby/C#) Generate a table driven FSM. This is the default code style.
+(C/D/Java/Ruby/C#/Go) Generate a table driven FSM. This is the default code style.
The table driven
FSM represents the state machine as static data. There are tables of states,
transitions, indicies and actions. The current state is stored in a variable.
@@ -137,21 +140,21 @@ compile but results in slower running code. The table driven FSM is suitable
for any FSM.
.TP
.B \-T1
-(C/D/Ruby/C#) Generate a faster table driven FSM by expanding action lists in the action
+(C/D/Ruby/C#/Go) Generate a faster table driven FSM by expanding action lists in the action
execute code.
.TP
.B \-F0
-(C/D/Ruby/C#) Generate a flat table driven FSM. Transitions are represented as an array
+(C/D/Ruby/C#/Go) Generate a flat table driven FSM. Transitions are represented as an array
indexed by the current alphabet character. This eliminates the need for a
binary search to locate transitions and produces faster code, however it is
only suitable for small alphabets.
.TP
.B \-F1
-(C/D/Ruby/C#) Generate a faster flat table driven FSM by expanding action lists in the action
+(C/D/Ruby/C#/Go) Generate a faster flat table driven FSM by expanding action lists in the action
execute code.
.TP
.B \-G0
-(C/D/C#) Generate a goto driven FSM. The goto driven FSM represents the state machine
+(C/D/C#/Go) Generate a goto driven FSM. The goto driven FSM represents the state machine
as a series of goto statements. While in the machine, the current state is
stored by the processor's instruction pointer. The execution is a flat function
where control is passed from state to state using gotos. In general, the goto
@@ -159,11 +162,11 @@ FSM produces faster code but results in a larger binary and a more expensive
host language compile.
.TP
.B \-G1
-(C/D/C#) Generate a faster goto driven FSM by expanding action lists in the action
+(C/D/C#/Go) Generate a faster goto driven FSM by expanding action lists in the action
execute code.
.TP
.B \-G2
-(C/D) Generate a really fast goto driven FSM by embedding action lists in the state
+(C/D/Go) Generate a really fast goto driven FSM by embedding action lists in the state
machine control code.
.TP
.B \-P<N>
@@ -645,10 +648,12 @@ Return to the target state of the transition on which the last fcall was made.
.I fbreak;
Save the current state and immediately break out of the machine.
.SH CREDITS
-Ragel was written by Adrian Thurston <thurston@complang.org>. Objective-C
-output contributed by Erich Ocean. D output contributed by Alan West. Ruby
-output contributed by Victor Hugo Borja. C Sharp code generation contributed by
-Daniel Tang. Contributions to Java code generation by Colin Fleming.
+Ragel was written by Adrian Thurston <thurston@complang.org>.
+Objective-C output contributed by Erich Ocean. D output contributed by
+Alan West. Ruby output contributed by Victor Hugo Borja. C Sharp code
+generation contributed by Daniel Tang. Contributions to Java code
+generation by Colin Fleming. Go code generation contributed by
+Justine Tunney.
.SH "SEE ALSO"
.BR re2c (1),
.BR flex (1)
diff --git a/examples/Makefile.in b/examples/Makefile.in
new file mode 100644
index 0000000..878721b
--- /dev/null
+++ b/examples/Makefile.in
@@ -0,0 +1,620 @@
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# Copyright 2002-2009 Adrian Thurston <thurston@complang.org>
+#
+
+# This file is part of Ragel.
+#
+# Ragel is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Ragel 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 Ragel; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+noinst_PROGRAMS = atoi$(EXEEXT) awkemu$(EXEEXT) clang$(EXEEXT) \
+ concurrent$(EXEEXT) cppscan$(EXEEXT) format$(EXEEXT) \
+ gotocallret$(EXEEXT) mailbox$(EXEEXT) params$(EXEEXT) \
+ pullscan$(EXEEXT) rlscan$(EXEEXT) statechart$(EXEEXT)
+subdir = examples
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/ragel/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_atoi_OBJECTS = atoi.$(OBJEXT)
+atoi_OBJECTS = $(am_atoi_OBJECTS)
+atoi_LDADD = $(LDADD)
+am_awkemu_OBJECTS = awkemu.$(OBJEXT)
+awkemu_OBJECTS = $(am_awkemu_OBJECTS)
+awkemu_LDADD = $(LDADD)
+am_clang_OBJECTS = clang.$(OBJEXT)
+clang_OBJECTS = $(am_clang_OBJECTS)
+clang_LDADD = $(LDADD)
+am_concurrent_OBJECTS = concurrent.$(OBJEXT)
+concurrent_OBJECTS = $(am_concurrent_OBJECTS)
+concurrent_LDADD = $(LDADD)
+am_cppscan_OBJECTS = cppscan.$(OBJEXT)
+cppscan_OBJECTS = $(am_cppscan_OBJECTS)
+cppscan_LDADD = $(LDADD)
+am_format_OBJECTS = format.$(OBJEXT)
+format_OBJECTS = $(am_format_OBJECTS)
+format_LDADD = $(LDADD)
+am_gotocallret_OBJECTS = gotocallret.$(OBJEXT)
+gotocallret_OBJECTS = $(am_gotocallret_OBJECTS)
+gotocallret_LDADD = $(LDADD)
+am_mailbox_OBJECTS = mailbox.$(OBJEXT)
+mailbox_OBJECTS = $(am_mailbox_OBJECTS)
+mailbox_LDADD = $(LDADD)
+am_params_OBJECTS = params.$(OBJEXT)
+params_OBJECTS = $(am_params_OBJECTS)
+params_LDADD = $(LDADD)
+am_pullscan_OBJECTS = pullscan.$(OBJEXT)
+pullscan_OBJECTS = $(am_pullscan_OBJECTS)
+pullscan_LDADD = $(LDADD)
+am_rlscan_OBJECTS = rlscan.$(OBJEXT)
+rlscan_OBJECTS = $(am_rlscan_OBJECTS)
+rlscan_LDADD = $(LDADD)
+am_statechart_OBJECTS = statechart.$(OBJEXT)
+statechart_OBJECTS = $(am_statechart_OBJECTS)
+statechart_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ragel
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+SOURCES = $(atoi_SOURCES) $(awkemu_SOURCES) $(clang_SOURCES) \
+ $(concurrent_SOURCES) $(cppscan_SOURCES) $(format_SOURCES) \
+ $(gotocallret_SOURCES) $(mailbox_SOURCES) $(params_SOURCES) \
+ $(pullscan_SOURCES) $(rlscan_SOURCES) $(statechart_SOURCES)
+DIST_SOURCES = $(atoi_SOURCES) $(awkemu_SOURCES) $(clang_SOURCES) \
+ $(concurrent_SOURCES) $(cppscan_SOURCES) $(format_SOURCES) \
+ $(gotocallret_SOURCES) $(mailbox_SOURCES) $(params_SOURCES) \
+ $(pullscan_SOURCES) $(rlscan_SOURCES) $(statechart_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+FIG2DEV = @FIG2DEV@
+GDC = @GDC@
+GMCS = @GMCS@
+GOBIN = @GOBIN@
+GOBJC = @GOBJC@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAC = @JAVAC@
+KELBT = @KELBT@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PDFLATEX = @PDFLATEX@
+PUBDATE = @PUBDATE@
+RAGEL = ../ragel/ragel
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TXL = @TXL@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+FLEX = flex
+RE2C = re2c
+EXTRA_DIST = \
+ gotocallret.rl pullscan.rl concurrent.rl rlscan.rl statechart.rl \
+ params.rl clang.rl cppscan.rl format.rl awkemu.rl mailbox.rl atoi.rl
+
+gotocallret_SOURCES = gotocallret.cpp
+pullscan_SOURCES = pullscan.c
+concurrent_SOURCES = concurrent.cpp
+rlscan_SOURCES = rlscan.cpp
+statechart_SOURCES = statechart.cpp
+params_SOURCES = params.c
+clang_SOURCES = clang.c
+cppscan_SOURCES = cppscan.cpp
+format_SOURCES = format.c
+awkemu_SOURCES = awkemu.c
+mailbox_SOURCES = mailbox.cpp
+atoi_SOURCES = atoi.cpp
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .cpp .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign examples/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+atoi$(EXEEXT): $(atoi_OBJECTS) $(atoi_DEPENDENCIES) $(EXTRA_atoi_DEPENDENCIES)
+ @rm -f atoi$(EXEEXT)
+ $(CXXLINK) $(atoi_OBJECTS) $(atoi_LDADD) $(LIBS)
+awkemu$(EXEEXT): $(awkemu_OBJECTS) $(awkemu_DEPENDENCIES) $(EXTRA_awkemu_DEPENDENCIES)
+ @rm -f awkemu$(EXEEXT)
+ $(LINK) $(awkemu_OBJECTS) $(awkemu_LDADD) $(LIBS)
+clang$(EXEEXT): $(clang_OBJECTS) $(clang_DEPENDENCIES) $(EXTRA_clang_DEPENDENCIES)
+ @rm -f clang$(EXEEXT)
+ $(LINK) $(clang_OBJECTS) $(clang_LDADD) $(LIBS)
+concurrent$(EXEEXT): $(concurrent_OBJECTS) $(concurrent_DEPENDENCIES) $(EXTRA_concurrent_DEPENDENCIES)
+ @rm -f concurrent$(EXEEXT)
+ $(CXXLINK) $(concurrent_OBJECTS) $(concurrent_LDADD) $(LIBS)
+cppscan$(EXEEXT): $(cppscan_OBJECTS) $(cppscan_DEPENDENCIES) $(EXTRA_cppscan_DEPENDENCIES)
+ @rm -f cppscan$(EXEEXT)
+ $(CXXLINK) $(cppscan_OBJECTS) $(cppscan_LDADD) $(LIBS)
+format$(EXEEXT): $(format_OBJECTS) $(format_DEPENDENCIES) $(EXTRA_format_DEPENDENCIES)
+ @rm -f format$(EXEEXT)
+ $(LINK) $(format_OBJECTS) $(format_LDADD) $(LIBS)
+gotocallret$(EXEEXT): $(gotocallret_OBJECTS) $(gotocallret_DEPENDENCIES) $(EXTRA_gotocallret_DEPENDENCIES)
+ @rm -f gotocallret$(EXEEXT)
+ $(CXXLINK) $(gotocallret_OBJECTS) $(gotocallret_LDADD) $(LIBS)
+mailbox$(EXEEXT): $(mailbox_OBJECTS) $(mailbox_DEPENDENCIES) $(EXTRA_mailbox_DEPENDENCIES)
+ @rm -f mailbox$(EXEEXT)
+ $(CXXLINK) $(mailbox_OBJECTS) $(mailbox_LDADD) $(LIBS)
+params$(EXEEXT): $(params_OBJECTS) $(params_DEPENDENCIES) $(EXTRA_params_DEPENDENCIES)
+ @rm -f params$(EXEEXT)
+ $(LINK) $(params_OBJECTS) $(params_LDADD) $(LIBS)
+pullscan$(EXEEXT): $(pullscan_OBJECTS) $(pullscan_DEPENDENCIES) $(EXTRA_pullscan_DEPENDENCIES)
+ @rm -f pullscan$(EXEEXT)
+ $(LINK) $(pullscan_OBJECTS) $(pullscan_LDADD) $(LIBS)
+rlscan$(EXEEXT): $(rlscan_OBJECTS) $(rlscan_DEPENDENCIES) $(EXTRA_rlscan_DEPENDENCIES)
+ @rm -f rlscan$(EXEEXT)
+ $(CXXLINK) $(rlscan_OBJECTS) $(rlscan_LDADD) $(LIBS)
+statechart$(EXEEXT): $(statechart_OBJECTS) $(statechart_DEPENDENCIES) $(EXTRA_statechart_DEPENDENCIES)
+ @rm -f statechart$(EXEEXT)
+ $(CXXLINK) $(statechart_OBJECTS) $(statechart_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atoi.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/awkemu.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clang.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/concurrent.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cppscan.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gotocallret.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mailbox.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/params.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pullscan.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rlscan.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/statechart.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.cpp.o:
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-noinstPROGRAMS ctags distclean distclean-compile \
+ distclean-generic distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+ uninstall-am
+
+
+gotocallret.cpp: gotocallret.rl
+ $(RAGEL) -G2 -o gotocallret.cpp gotocallret.rl
+
+pullscan.c: pullscan.rl $(RAGEL)
+ $(RAGEL) -G2 -o $@ pullscan.rl
+
+concurrent.cpp: concurrent.rl $(RAGEL)
+ $(RAGEL) -G2 -o concurrent.cpp concurrent.rl
+
+rlscan.cpp: rlscan.rl
+ $(RAGEL) -G2 -o rlscan.cpp rlscan.rl
+
+statechart.cpp: statechart.rl
+ $(RAGEL) -G2 -o statechart.cpp statechart.rl
+
+params.c: params.rl
+ $(RAGEL) -G2 -o params.c params.rl
+
+clang.c: clang.rl
+ $(RAGEL) -G2 -o clang.c clang.rl
+
+cppscan.cpp: cppscan.rl
+ $(RAGEL) -G2 -o $@ cppscan.rl
+
+format.c: format.rl
+ $(RAGEL) -G2 -o format.c format.rl
+
+awkemu.c: awkemu.rl
+ $(RAGEL) -G2 -o awkemu.c awkemu.rl
+
+mailbox.cpp: mailbox.rl
+ $(RAGEL) -G2 -o mailbox.cpp mailbox.rl
+
+atoi.cpp: atoi.rl
+ $(RAGEL) -G2 -o atoi.cpp atoi.rl
+
+###
+
+lex-cppscan.cpp: cppscan.lex
+ $(FLEX) -f -o $@ $<
+
+re2c-cppscan.cpp: cppscan.rec
+ $(RE2C) -s $< > $@
+
+example.cpp: example.rec
+ $(RE2C) -s $< > $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/atoi.cpp b/examples/atoi.cpp
new file mode 100644
index 0000000..45677f3
--- /dev/null
+++ b/examples/atoi.cpp
@@ -0,0 +1,120 @@
+
+#line 1 "atoi.rl"
+/*
+ * Convert a string to an integer.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+
+#line 13 "atoi.cpp"
+static const int atoi_start = 1;
+static const int atoi_first_final = 4;
+static const int atoi_error = 0;
+
+static const int atoi_en_main = 1;
+
+
+#line 12 "atoi.rl"
+
+
+long long atoi( char *str )
+{
+ char *p = str, *pe = str + strlen( str );
+ int cs;
+ long long val = 0;
+ bool neg = false;
+
+
+#line 32 "atoi.cpp"
+ {
+ cs = atoi_start;
+ }
+
+#line 37 "atoi.cpp"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+case 1:
+ switch( (*p) ) {
+ case 43: goto st2;
+ case 45: goto tr2;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr3;
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+tr2:
+#line 22 "atoi.rl"
+ {
+ neg = true;
+ }
+ goto st2;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+#line 64 "atoi.cpp"
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr3;
+ goto st0;
+tr3:
+#line 26 "atoi.rl"
+ {
+ val = val * 10 + ((*p) - '0');
+ }
+ goto st3;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+#line 78 "atoi.cpp"
+ if ( (*p) == 10 )
+ goto st4;
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr3;
+ goto st0;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ goto st0;
+ }
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 37 "atoi.rl"
+
+
+ if ( neg )
+ val = -1 * val;
+
+ if ( cs < atoi_first_final )
+ fprintf( stderr, "atoi: there was an error\n" );
+
+ return val;
+};
+
+
+#define BUFSIZE 1024
+
+int main()
+{
+ char buf[BUFSIZE];
+ while ( fgets( buf, sizeof(buf), stdin ) != 0 ) {
+ long long value = atoi( buf );
+ printf( "%lld\n", value );
+ }
+ return 0;
+}
diff --git a/examples/awkemu.c b/examples/awkemu.c
new file mode 100644
index 0000000..2fdcb01
--- /dev/null
+++ b/examples/awkemu.c
@@ -0,0 +1,217 @@
+
+#line 1 "awkemu.rl"
+/*
+ * Perform the basic line parsing of input performed by awk.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+
+#line 55 "awkemu.rl"
+
+
+
+#line 18 "awkemu.c"
+static const int awkemu_start = 2;
+
+static const int awkemu_en_main = 2;
+
+
+#line 58 "awkemu.rl"
+
+#define MAXWORDS 256
+#define BUFSIZE 4096
+char buf[BUFSIZE];
+
+int main()
+{
+ int i, nwords = 0;
+ char *ls = 0;
+ char *ws[MAXWORDS];
+ char *we[MAXWORDS];
+
+ int cs;
+ int have = 0;
+
+
+#line 41 "awkemu.c"
+ {
+ cs = awkemu_start;
+ }
+
+#line 74 "awkemu.rl"
+
+ while ( 1 ) {
+ char *p, *pe, *data = buf + have;
+ int len, space = BUFSIZE - have;
+ /* fprintf( stderr, "space: %i\n", space ); */
+
+ if ( space == 0 ) {
+ fprintf(stderr, "buffer out of space\n");
+ exit(1);
+ }
+
+ len = fread( data, 1, space, stdin );
+ /* fprintf( stderr, "len: %i\n", len ); */
+ if ( len == 0 )
+ break;
+
+ /* Find the last newline by searching backwards. This is where
+ * we will stop processing on this iteration. */
+ p = buf;
+ pe = buf + have + len - 1;
+ while ( *pe != '\n' && pe >= buf )
+ pe--;
+ pe += 1;
+
+ /* fprintf( stderr, "running on: %i\n", pe - p ); */
+
+
+#line 74 "awkemu.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+tr2:
+#line 17 "awkemu.rl"
+ {
+ we[nwords++] = p;
+ }
+#line 26 "awkemu.rl"
+ {
+ printf("endline(%i): ", nwords );
+ fwrite( ls, 1, p - ls, stdout );
+ printf("\n");
+
+ for ( i = 0; i < nwords; i++ ) {
+ printf(" word: ");
+ fwrite( ws[i], 1, we[i] - ws[i], stdout );
+ printf("\n");
+ }
+ }
+ goto st2;
+tr5:
+#line 26 "awkemu.rl"
+ {
+ printf("endline(%i): ", nwords );
+ fwrite( ls, 1, p - ls, stdout );
+ printf("\n");
+
+ for ( i = 0; i < nwords; i++ ) {
+ printf(" word: ");
+ fwrite( ws[i], 1, we[i] - ws[i], stdout );
+ printf("\n");
+ }
+ }
+ goto st2;
+tr8:
+#line 21 "awkemu.rl"
+ {
+ nwords = 0;
+ ls = p;
+ }
+#line 26 "awkemu.rl"
+ {
+ printf("endline(%i): ", nwords );
+ fwrite( ls, 1, p - ls, stdout );
+ printf("\n");
+
+ for ( i = 0; i < nwords; i++ ) {
+ printf(" word: ");
+ fwrite( ws[i], 1, we[i] - ws[i], stdout );
+ printf("\n");
+ }
+ }
+ goto st2;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+#line 135 "awkemu.c"
+ switch( (*p) ) {
+ case 9: goto tr7;
+ case 10: goto tr8;
+ case 32: goto tr7;
+ }
+ goto tr6;
+tr3:
+#line 13 "awkemu.rl"
+ {
+ ws[nwords] = p;
+ }
+ goto st0;
+tr6:
+#line 21 "awkemu.rl"
+ {
+ nwords = 0;
+ ls = p;
+ }
+#line 13 "awkemu.rl"
+ {
+ ws[nwords] = p;
+ }
+ goto st0;
+st0:
+ if ( ++p == pe )
+ goto _test_eof0;
+case 0:
+#line 163 "awkemu.c"
+ switch( (*p) ) {
+ case 9: goto tr1;
+ case 10: goto tr2;
+ case 32: goto tr1;
+ }
+ goto st0;
+tr1:
+#line 17 "awkemu.rl"
+ {
+ we[nwords++] = p;
+ }
+ goto st1;
+tr7:
+#line 21 "awkemu.rl"
+ {
+ nwords = 0;
+ ls = p;
+ }
+ goto st1;
+st1:
+ if ( ++p == pe )
+ goto _test_eof1;
+case 1:
+#line 187 "awkemu.c"
+ switch( (*p) ) {
+ case 9: goto st1;
+ case 10: goto tr5;
+ case 32: goto st1;
+ }
+ goto tr3;
+ }
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof0: cs = 0; goto _test_eof;
+ _test_eof1: cs = 1; goto _test_eof;
+
+ _test_eof: {}
+ }
+
+#line 101 "awkemu.rl"
+
+ /* How much is still in the buffer. */
+ have = data + len - pe;
+ if ( have > 0 )
+ memmove( buf, pe, have );
+
+ /* fprintf(stderr, "have: %i\n", have ); */
+
+ if ( len < space )
+ break;
+ }
+
+ if ( have > 0 )
+ fprintf(stderr, "input not newline terminated\n");
+ return 0;
+}
diff --git a/examples/awkequiv.awk b/examples/awkequiv.awk
deleted file mode 100755
index 9877dd3..0000000
--- a/examples/awkequiv.awk
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/awk -f
-#
-
-
-{
- print "endline(" NF "): " $0
- for ( i = 1; i <= NF; i++ ) {
- print " word: " $i
- }
-}
diff --git a/examples/clang.c b/examples/clang.c
new file mode 100644
index 0000000..c8fb683
--- /dev/null
+++ b/examples/clang.c
@@ -0,0 +1,456 @@
+
+#line 1 "clang.rl"
+/*
+ * A mini C-like language scanner.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+
+#line 91 "clang.rl"
+
+
+
+#line 17 "clang.c"
+static const int clang_start = 10;
+static const int clang_error = 0;
+
+static const int clang_en_c_comment = 8;
+static const int clang_en_main = 10;
+
+
+#line 94 "clang.rl"
+
+#define BUFSIZE 128
+
+void scanner()
+{
+ static char buf[BUFSIZE];
+ int cs, act, have = 0, curline = 1;
+ char *ts, *te = 0;
+ int done = 0;
+
+
+#line 37 "clang.c"
+ {
+ cs = clang_start;
+ ts = 0;
+ te = 0;
+ act = 0;
+ }
+
+#line 105 "clang.rl"
+
+ while ( !done ) {
+ char *p = buf + have, *pe, *eof = 0;
+ int len, space = BUFSIZE - have;
+
+ if ( space == 0 ) {
+ /* We've used up the entire buffer storing an already-parsed token
+ * prefix that must be preserved. */
+ fprintf(stderr, "OUT OF BUFFER SPACE\n" );
+ exit(1);
+ }
+
+ len = fread( p, 1, space, stdin );
+ pe = p + len;
+
+ /* Check if this is the end of file. */
+ if ( len < space ) {
+ eof = pe;
+ done = 1;
+ }
+
+
+#line 68 "clang.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+tr2:
+#line 50 "clang.rl"
+ {te = p+1;{
+ printf( "double_lit(%i): ", curline );
+ fwrite( ts, 1, te-ts, stdout );
+ printf("\n");
+ }}
+ goto st10;
+tr6:
+#line 42 "clang.rl"
+ {te = p+1;{
+ printf( "single_lit(%i): ", curline );
+ fwrite( ts, 1, te-ts, stdout );
+ printf("\n");
+ }}
+ goto st10;
+tr8:
+#line 28 "clang.rl"
+ {{p = ((te))-1;}{
+ printf( "symbol(%i): %c\n", curline, ts[0] );
+ }}
+ goto st10;
+tr10:
+#line 12 "clang.rl"
+ {curline += 1;}
+#line 62 "clang.rl"
+ {te = p+1;}
+ goto st10;
+tr11:
+#line 68 "clang.rl"
+ {{p = ((te))-1;}{
+ printf( "int(%i): ", curline );
+ fwrite( ts, 1, te-ts, stdout );
+ printf("\n");
+ }}
+ goto st10;
+tr18:
+#line 57 "clang.rl"
+ {te = p+1;}
+ goto st10;
+tr19:
+#line 12 "clang.rl"
+ {curline += 1;}
+#line 57 "clang.rl"
+ {te = p+1;}
+ goto st10;
+tr20:
+#line 28 "clang.rl"
+ {te = p+1;{
+ printf( "symbol(%i): %c\n", curline, ts[0] );
+ }}
+ goto st10;
+tr25:
+#line 28 "clang.rl"
+ {te = p;p--;{
+ printf( "symbol(%i): %c\n", curline, ts[0] );
+ }}
+ goto st10;
+tr26:
+#line 64 "clang.rl"
+ {te = p+1;{ {goto st8;} }}
+ goto st10;
+tr27:
+#line 68 "clang.rl"
+ {te = p;p--;{
+ printf( "int(%i): ", curline );
+ fwrite( ts, 1, te-ts, stdout );
+ printf("\n");
+ }}
+ goto st10;
+tr30:
+#line 76 "clang.rl"
+ {te = p;p--;{
+ printf( "float(%i): ", curline );
+ fwrite( ts, 1, te-ts, stdout );
+ printf("\n");
+ }}
+ goto st10;
+tr31:
+#line 84 "clang.rl"
+ {te = p;p--;{
+ printf( "hex(%i): ", curline );
+ fwrite( ts, 1, te-ts, stdout );
+ printf("\n");
+ }}
+ goto st10;
+tr32:
+#line 34 "clang.rl"
+ {te = p;p--;{
+ printf( "ident(%i): ", curline );
+ fwrite( ts, 1, te-ts, stdout );
+ printf("\n");
+ }}
+ goto st10;
+st10:
+#line 1 "NONE"
+ {ts = 0;}
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+#line 1 "NONE"
+ {ts = p;}
+#line 176 "clang.c"
+ switch( (*p) ) {
+ case 10: goto tr19;
+ case 34: goto st1;
+ case 39: goto st3;
+ case 47: goto tr21;
+ case 48: goto tr22;
+ case 95: goto st16;
+ }
+ if ( (*p) < 65 ) {
+ if ( (*p) < 49 ) {
+ if ( 33 <= (*p) && (*p) <= 46 )
+ goto tr20;
+ } else if ( (*p) > 57 ) {
+ if ( 58 <= (*p) && (*p) <= 64 )
+ goto tr20;
+ } else
+ goto tr23;
+ } else if ( (*p) > 90 ) {
+ if ( (*p) < 97 ) {
+ if ( 91 <= (*p) && (*p) <= 96 )
+ goto tr20;
+ } else if ( (*p) > 122 ) {
+ if ( 123 <= (*p) && (*p) <= 126 )
+ goto tr20;
+ } else
+ goto st16;
+ } else
+ goto st16;
+ goto tr18;
+tr1:
+#line 12 "clang.rl"
+ {curline += 1;}
+ goto st1;
+st1:
+ if ( ++p == pe )
+ goto _test_eof1;
+case 1:
+#line 214 "clang.c"
+ switch( (*p) ) {
+ case 10: goto tr1;
+ case 34: goto tr2;
+ case 92: goto st2;
+ }
+ goto st1;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ if ( (*p) == 10 )
+ goto tr1;
+ goto st1;
+tr5:
+#line 12 "clang.rl"
+ {curline += 1;}
+ goto st3;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+#line 236 "clang.c"
+ switch( (*p) ) {
+ case 10: goto tr5;
+ case 39: goto tr6;
+ case 92: goto st4;
+ }
+ goto st3;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ if ( (*p) == 10 )
+ goto tr5;
+ goto st3;
+tr21:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st11;
+st11:
+ if ( ++p == pe )
+ goto _test_eof11;
+case 11:
+#line 258 "clang.c"
+ switch( (*p) ) {
+ case 42: goto tr26;
+ case 47: goto st5;
+ }
+ goto tr25;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ if ( (*p) == 10 )
+ goto tr10;
+ goto st5;
+tr22:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st12;
+st12:
+ if ( ++p == pe )
+ goto _test_eof12;
+case 12:
+#line 279 "clang.c"
+ switch( (*p) ) {
+ case 46: goto st6;
+ case 120: goto st7;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr23;
+ goto tr27;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st13;
+ goto tr11;
+st13:
+ if ( ++p == pe )
+ goto _test_eof13;
+case 13:
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st13;
+ goto tr30;
+tr23:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st14;
+st14:
+ if ( ++p == pe )
+ goto _test_eof14;
+case 14:
+#line 309 "clang.c"
+ if ( (*p) == 46 )
+ goto st6;
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr23;
+ goto tr27;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st15;
+ } else if ( (*p) > 70 ) {
+ if ( 97 <= (*p) && (*p) <= 102 )
+ goto st15;
+ } else
+ goto st15;
+ goto tr11;
+st15:
+ if ( ++p == pe )
+ goto _test_eof15;
+case 15:
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st15;
+ } else if ( (*p) > 70 ) {
+ if ( 97 <= (*p) && (*p) <= 102 )
+ goto st15;
+ } else
+ goto st15;
+ goto tr31;
+st16:
+ if ( ++p == pe )
+ goto _test_eof16;
+case 16:
+ if ( (*p) == 95 )
+ goto st16;
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st16;
+ } else if ( (*p) > 90 ) {
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st16;
+ } else
+ goto st16;
+ goto tr32;
+tr15:
+#line 12 "clang.rl"
+ {curline += 1;}
+ goto st8;
+st8:
+#line 1 "NONE"
+ {ts = 0;}
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+#line 366 "clang.c"
+ switch( (*p) ) {
+ case 10: goto tr15;
+ case 42: goto st9;
+ }
+ goto st8;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+ switch( (*p) ) {
+ case 10: goto tr15;
+ case 42: goto st9;
+ case 47: goto tr17;
+ }
+ goto st8;
+tr17:
+#line 16 "clang.rl"
+ {{goto st10;}}
+ goto st17;
+st17:
+ if ( ++p == pe )
+ goto _test_eof17;
+case 17:
+#line 390 "clang.c"
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+ }
+ _test_eof10: cs = 10; goto _test_eof;
+ _test_eof1: cs = 1; goto _test_eof;
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof11: cs = 11; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof12: cs = 12; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof13: cs = 13; goto _test_eof;
+ _test_eof14: cs = 14; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof15: cs = 15; goto _test_eof;
+ _test_eof16: cs = 16; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+ _test_eof17: cs = 17; goto _test_eof;
+
+ _test_eof: {}
+ if ( p == eof )
+ {
+ switch ( cs ) {
+ case 11: goto tr25;
+ case 5: goto tr8;
+ case 12: goto tr27;
+ case 6: goto tr11;
+ case 13: goto tr30;
+ case 14: goto tr27;
+ case 7: goto tr11;
+ case 15: goto tr31;
+ case 16: goto tr32;
+ }
+ }
+
+ _out: {}
+ }
+
+#line 127 "clang.rl"
+
+ if ( cs == clang_error ) {
+ fprintf(stderr, "PARSE ERROR\n" );
+ break;
+ }
+
+ if ( ts == 0 )
+ have = 0;
+ else {
+ /* There is a prefix to preserve, shift it over. */
+ have = pe - ts;
+ memmove( buf, ts, have );
+ te = buf + (te-ts);
+ ts = buf;
+ }
+ }
+}
+
+int main()
+{
+ scanner();
+ return 0;
+}
+
diff --git a/examples/concurrent.cpp b/examples/concurrent.cpp
new file mode 100644
index 0000000..c2278cb
--- /dev/null
+++ b/examples/concurrent.cpp
@@ -0,0 +1,986 @@
+
+#line 1 "concurrent.rl"
+/*
+ * Show off concurrent abilities.
+ */
+
+#include <iostream>
+#include <stdlib.h>
+#include <stdio.h>
+
+using namespace std;
+
+#define BUFSIZE 2048
+
+struct Concurrent
+{
+ int cur_char;
+ int start_word;
+ int start_comment;
+ int start_literal;
+
+ int cs;
+
+ int init( );
+ int execute( const char *data, int len, bool isEof );
+ int finish( );
+};
+
+
+#line 75 "concurrent.rl"
+
+
+
+#line 35 "concurrent.cpp"
+static const int Concurrent_start = 0;
+static const int Concurrent_first_final = 0;
+static const int Concurrent_error = -1;
+
+static const int Concurrent_en_main = 0;
+
+
+#line 78 "concurrent.rl"
+
+int Concurrent::init( )
+{
+
+#line 48 "concurrent.cpp"
+ {
+ cs = Concurrent_start;
+ }
+
+#line 82 "concurrent.rl"
+ cur_char = 0;
+ return 1;
+}
+
+int Concurrent::execute( const char *data, int len, bool isEof )
+{
+ const char *p = data;
+ const char *pe = data + len;
+ const char *eof = isEof ? pe : 0;
+
+
+#line 65 "concurrent.cpp"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+tr1:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+ goto st0;
+tr5:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 37 "concurrent.rl"
+ {
+ cout << "word: " << start_word <<
+ " " << cur_char-1 << endl;
+ }
+ goto st0;
+tr19:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 37 "concurrent.rl"
+ {
+ cout << "word: " << start_word <<
+ " " << cur_char-1 << endl;
+ }
+#line 53 "concurrent.rl"
+ {
+ cout << "literal: " << start_literal <<
+ " " << cur_char-1 << endl;
+ }
+ goto st0;
+tr46:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 37 "concurrent.rl"
+ {
+ cout << "word: " << start_word <<
+ " " << cur_char-1 << endl;
+ }
+#line 45 "concurrent.rl"
+ {
+ cout << "comment: " << start_comment <<
+ " " << cur_char-1 << endl;
+ }
+ goto st0;
+st0:
+ if ( ++p == pe )
+ goto _test_eof0;
+case 0:
+#line 124 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr1;
+ case 39: goto tr2;
+ case 47: goto tr3;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr1;
+ goto tr0;
+tr0:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 34 "concurrent.rl"
+ {
+ start_word = cur_char;
+ }
+ goto st1;
+tr4:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+ goto st1;
+tr18:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 53 "concurrent.rl"
+ {
+ cout << "literal: " << start_literal <<
+ " " << cur_char-1 << endl;
+ }
+ goto st1;
+tr45:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 45 "concurrent.rl"
+ {
+ cout << "comment: " << start_comment <<
+ " " << cur_char-1 << endl;
+ }
+ goto st1;
+st1:
+ if ( ++p == pe )
+ goto _test_eof1;
+case 1:
+#line 175 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr5;
+ case 39: goto tr6;
+ case 47: goto tr7;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr5;
+ goto tr4;
+tr13:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 34 "concurrent.rl"
+ {
+ start_word = cur_char;
+ }
+ goto st2;
+tr8:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+ goto st2;
+tr2:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 34 "concurrent.rl"
+ {
+ start_word = cur_char;
+ }
+#line 50 "concurrent.rl"
+ {
+ start_literal = cur_char;
+ }
+ goto st2;
+tr6:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 50 "concurrent.rl"
+ {
+ start_literal = cur_char;
+ }
+ goto st2;
+tr20:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 53 "concurrent.rl"
+ {
+ cout << "literal: " << start_literal <<
+ " " << cur_char-1 << endl;
+ }
+#line 50 "concurrent.rl"
+ {
+ start_literal = cur_char;
+ }
+ goto st2;
+tr50:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 45 "concurrent.rl"
+ {
+ cout << "comment: " << start_comment <<
+ " " << cur_char-1 << endl;
+ }
+ goto st2;
+tr47:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 45 "concurrent.rl"
+ {
+ cout << "comment: " << start_comment <<
+ " " << cur_char-1 << endl;
+ }
+#line 50 "concurrent.rl"
+ {
+ start_literal = cur_char;
+ }
+ goto st2;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+#line 269 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr9;
+ case 39: goto tr10;
+ case 47: goto tr11;
+ case 92: goto tr12;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr9;
+ goto tr8;
+tr14:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+ goto st3;
+tr9:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 37 "concurrent.rl"
+ {
+ cout << "word: " << start_word <<
+ " " << cur_char-1 << endl;
+ }
+ goto st3;
+tr51:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 37 "concurrent.rl"
+ {
+ cout << "word: " << start_word <<
+ " " << cur_char-1 << endl;
+ }
+#line 45 "concurrent.rl"
+ {
+ cout << "comment: " << start_comment <<
+ " " << cur_char-1 << endl;
+ }
+ goto st3;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+#line 316 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr14;
+ case 39: goto tr15;
+ case 47: goto tr16;
+ case 92: goto tr17;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr14;
+ goto tr13;
+tr15:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 34 "concurrent.rl"
+ {
+ start_word = cur_char;
+ }
+ goto st4;
+tr10:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+ goto st4;
+tr52:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 45 "concurrent.rl"
+ {
+ cout << "comment: " << start_comment <<
+ " " << cur_char-1 << endl;
+ }
+ goto st4;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+#line 357 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr19;
+ case 39: goto tr20;
+ case 47: goto tr21;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr19;
+ goto tr18;
+tr3:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 34 "concurrent.rl"
+ {
+ start_word = cur_char;
+ }
+#line 42 "concurrent.rl"
+ {
+ start_comment = cur_char;
+ }
+ goto st5;
+tr7:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 42 "concurrent.rl"
+ {
+ start_comment = cur_char;
+ }
+ goto st5;
+tr21:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 42 "concurrent.rl"
+ {
+ start_comment = cur_char;
+ }
+#line 53 "concurrent.rl"
+ {
+ cout << "literal: " << start_literal <<
+ " " << cur_char-1 << endl;
+ }
+ goto st5;
+tr48:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 45 "concurrent.rl"
+ {
+ cout << "comment: " << start_comment <<
+ " " << cur_char-1 << endl;
+ }
+#line 42 "concurrent.rl"
+ {
+ start_comment = cur_char;
+ }
+ goto st5;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+#line 424 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr5;
+ case 39: goto tr6;
+ case 42: goto tr22;
+ case 47: goto tr7;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr5;
+ goto tr4;
+tr26:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 34 "concurrent.rl"
+ {
+ start_word = cur_char;
+ }
+ goto st6;
+tr22:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+ goto st6;
+tr40:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 53 "concurrent.rl"
+ {
+ cout << "literal: " << start_literal <<
+ " " << cur_char-1 << endl;
+ }
+ goto st6;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+#line 465 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr23;
+ case 39: goto tr24;
+ case 42: goto tr25;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr23;
+ goto tr22;
+tr27:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+ goto st7;
+tr23:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 37 "concurrent.rl"
+ {
+ cout << "word: " << start_word <<
+ " " << cur_char-1 << endl;
+ }
+ goto st7;
+tr41:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 37 "concurrent.rl"
+ {
+ cout << "word: " << start_word <<
+ " " << cur_char-1 << endl;
+ }
+#line 53 "concurrent.rl"
+ {
+ cout << "literal: " << start_literal <<
+ " " << cur_char-1 << endl;
+ }
+ goto st7;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+#line 511 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr27;
+ case 39: goto tr28;
+ case 42: goto tr29;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr27;
+ goto tr26;
+tr35:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 34 "concurrent.rl"
+ {
+ start_word = cur_char;
+ }
+ goto st8;
+tr30:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+ goto st8;
+tr28:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 34 "concurrent.rl"
+ {
+ start_word = cur_char;
+ }
+#line 50 "concurrent.rl"
+ {
+ start_literal = cur_char;
+ }
+ goto st8;
+tr24:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 50 "concurrent.rl"
+ {
+ start_literal = cur_char;
+ }
+ goto st8;
+tr42:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 53 "concurrent.rl"
+ {
+ cout << "literal: " << start_literal <<
+ " " << cur_char-1 << endl;
+ }
+#line 50 "concurrent.rl"
+ {
+ start_literal = cur_char;
+ }
+ goto st8;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+#line 579 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr31;
+ case 39: goto tr32;
+ case 42: goto tr33;
+ case 92: goto tr34;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr31;
+ goto tr30;
+tr36:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+ goto st9;
+tr31:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 37 "concurrent.rl"
+ {
+ cout << "word: " << start_word <<
+ " " << cur_char-1 << endl;
+ }
+ goto st9;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+#line 610 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr36;
+ case 39: goto tr37;
+ case 42: goto tr38;
+ case 92: goto tr39;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr36;
+ goto tr35;
+tr37:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 34 "concurrent.rl"
+ {
+ start_word = cur_char;
+ }
+ goto st10;
+tr32:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+ goto st10;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+#line 640 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr41;
+ case 39: goto tr42;
+ case 42: goto tr43;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr41;
+ goto tr40;
+tr29:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 34 "concurrent.rl"
+ {
+ start_word = cur_char;
+ }
+ goto st11;
+tr25:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+ goto st11;
+tr43:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 53 "concurrent.rl"
+ {
+ cout << "literal: " << start_literal <<
+ " " << cur_char-1 << endl;
+ }
+ goto st11;
+st11:
+ if ( ++p == pe )
+ goto _test_eof11;
+case 11:
+#line 680 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr23;
+ case 39: goto tr24;
+ case 42: goto tr25;
+ case 47: goto tr44;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr23;
+ goto tr22;
+tr44:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+ goto st12;
+st12:
+ if ( ++p == pe )
+ goto _test_eof12;
+case 12:
+#line 700 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr46;
+ case 39: goto tr47;
+ case 47: goto tr48;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr46;
+ goto tr45;
+tr38:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 34 "concurrent.rl"
+ {
+ start_word = cur_char;
+ }
+ goto st13;
+tr33:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+ goto st13;
+st13:
+ if ( ++p == pe )
+ goto _test_eof13;
+case 13:
+#line 729 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr31;
+ case 39: goto tr32;
+ case 42: goto tr33;
+ case 47: goto tr49;
+ case 92: goto tr34;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr31;
+ goto tr30;
+tr49:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+ goto st14;
+st14:
+ if ( ++p == pe )
+ goto _test_eof14;
+case 14:
+#line 750 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr51;
+ case 39: goto tr52;
+ case 47: goto tr53;
+ case 92: goto tr54;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr51;
+ goto tr50;
+tr16:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 34 "concurrent.rl"
+ {
+ start_word = cur_char;
+ }
+#line 42 "concurrent.rl"
+ {
+ start_comment = cur_char;
+ }
+ goto st15;
+tr11:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 42 "concurrent.rl"
+ {
+ start_comment = cur_char;
+ }
+ goto st15;
+tr53:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 45 "concurrent.rl"
+ {
+ cout << "comment: " << start_comment <<
+ " " << cur_char-1 << endl;
+ }
+#line 42 "concurrent.rl"
+ {
+ start_comment = cur_char;
+ }
+ goto st15;
+st15:
+ if ( ++p == pe )
+ goto _test_eof15;
+case 15:
+#line 803 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr9;
+ case 39: goto tr10;
+ case 42: goto tr30;
+ case 47: goto tr11;
+ case 92: goto tr12;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr9;
+ goto tr8;
+tr17:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 34 "concurrent.rl"
+ {
+ start_word = cur_char;
+ }
+ goto st16;
+tr12:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+ goto st16;
+tr54:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 45 "concurrent.rl"
+ {
+ cout << "comment: " << start_comment <<
+ " " << cur_char-1 << endl;
+ }
+ goto st16;
+st16:
+ if ( ++p == pe )
+ goto _test_eof16;
+case 16:
+#line 845 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr9;
+ case 47: goto tr11;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr9;
+ goto tr8;
+tr39:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+#line 34 "concurrent.rl"
+ {
+ start_word = cur_char;
+ }
+ goto st17;
+tr34:
+#line 30 "concurrent.rl"
+ {
+ cur_char += 1;
+ }
+ goto st17;
+st17:
+ if ( ++p == pe )
+ goto _test_eof17;
+case 17:
+#line 873 "concurrent.cpp"
+ switch( (*p) ) {
+ case 32: goto tr31;
+ case 42: goto tr33;
+ }
+ if ( 9 <= (*p) && (*p) <= 13 )
+ goto tr31;
+ goto tr30;
+ }
+ _test_eof0: cs = 0; goto _test_eof;
+ _test_eof1: cs = 1; goto _test_eof;
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+ _test_eof10: cs = 10; goto _test_eof;
+ _test_eof11: cs = 11; goto _test_eof;
+ _test_eof12: cs = 12; goto _test_eof;
+ _test_eof13: cs = 13; goto _test_eof;
+ _test_eof14: cs = 14; goto _test_eof;
+ _test_eof15: cs = 15; goto _test_eof;
+ _test_eof16: cs = 16; goto _test_eof;
+ _test_eof17: cs = 17; goto _test_eof;
+
+ _test_eof: {}
+ if ( p == eof )
+ {
+ switch ( cs ) {
+ case 1:
+ case 2:
+ case 5:
+ case 6:
+ case 8:
+ case 11:
+ case 13:
+ case 15:
+ case 16:
+ case 17:
+#line 37 "concurrent.rl"
+ {
+ cout << "word: " << start_word <<
+ " " << cur_char-1 << endl;
+ }
+ break;
+ case 12:
+ case 14:
+#line 37 "concurrent.rl"
+ {
+ cout << "word: " << start_word <<
+ " " << cur_char-1 << endl;
+ }
+#line 45 "concurrent.rl"
+ {
+ cout << "comment: " << start_comment <<
+ " " << cur_char-1 << endl;
+ }
+ break;
+ case 4:
+ case 10:
+#line 37 "concurrent.rl"
+ {
+ cout << "word: " << start_word <<
+ " " << cur_char-1 << endl;
+ }
+#line 53 "concurrent.rl"
+ {
+ cout << "literal: " << start_literal <<
+ " " << cur_char-1 << endl;
+ }
+ break;
+#line 947 "concurrent.cpp"
+ }
+ }
+
+ }
+
+#line 93 "concurrent.rl"
+
+ if ( cs == Concurrent_error )
+ return -1;
+ if ( cs >= Concurrent_first_final )
+ return 1;
+ return 0;
+}
+
+int Concurrent::finish( )
+{
+ if ( cs == Concurrent_error )
+ return -1;
+ if ( cs >= Concurrent_first_final )
+ return 1;
+ return 0;
+}
+
+Concurrent concurrent;
+char buf[BUFSIZE];
+
+int main()
+{
+ concurrent.init();
+ while ( 1 ) {
+ int len = fread( buf, 1, BUFSIZE, stdin );
+ concurrent.execute( buf, len, len != BUFSIZE );
+ if ( len != BUFSIZE )
+ break;
+ }
+
+ if ( concurrent.finish() <= 0 )
+ cerr << "concurrent: error parsing input" << endl;
+ return 0;
+}
diff --git a/examples/cppscan.cpp b/examples/cppscan.cpp
new file mode 100644
index 0000000..6894311
--- /dev/null
+++ b/examples/cppscan.cpp
@@ -0,0 +1,908 @@
+
+#line 1 "cppscan.rl"
+/*
+ * A C++ scanner. Uses the longest match construction.
+ * << <= <<= >> >= >>= are left out since angle brackets are used in templates.
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <iostream>
+
+#define TK_Dlit 256
+#define TK_Slit 257
+#define TK_Float 258
+#define TK_Id 259
+#define TK_NameSep 260
+#define TK_Arrow 261
+#define TK_PlusPlus 262
+#define TK_MinusMinus 263
+#define TK_ArrowStar 264
+#define TK_DotStar 265
+#define TK_ShiftLeft 266
+#define TK_ShiftRight 267
+#define TK_IntegerDecimal 268
+#define TK_IntegerOctal 269
+#define TK_IntegerHex 270
+#define TK_EqualsEquals 271
+#define TK_NotEquals 272
+#define TK_AndAnd 273
+#define TK_OrOr 274
+#define TK_MultAssign 275
+#define TK_DivAssign 276
+#define TK_PercentAssign 277
+#define TK_PlusAssign 278
+#define TK_MinusAssign 279
+#define TK_AmpAssign 280
+#define TK_CaretAssign 281
+#define TK_BarAssign 282
+#define TK_DotDotDot 283
+#define TK_Whitespace 284
+#define TK_Comment 285
+
+#define BUFSIZE 16384
+
+/* EOF char used to flush out that last token. This should be a whitespace
+ * token. */
+
+#define LAST_CHAR 0
+
+using std::cerr;
+using std::cout;
+using std::cin;
+using std::endl;
+
+static char buf[BUFSIZE];
+static int line = 1, col = 1;
+static char *ts, *te;
+static int act, have = 0;
+static int cs;
+
+
+#line 63 "cppscan.cpp"
+static const int Scanner_start = 12;
+static const int Scanner_error = 0;
+
+static const int Scanner_en_c_comment = 10;
+static const int Scanner_en_main = 12;
+
+
+#line 132 "cppscan.rl"
+
+
+void token( int tok )
+{
+ char *data = ts;
+ int len = te - ts;
+
+ cout << '<' << tok << "> ";
+ cout.write( data, len );
+ cout << '\n';
+
+ /* Count newlines and columns. This code is here mainly for having some
+ * code in the token routine when commenting out the above output during
+ * performance testing. */
+ for ( int i = 0; i < len; i ++ ) {
+ if ( data[i] == '\n' ) {
+ line += 1;
+ col = 1;
+ }
+ else {
+ col += 1;
+ }
+ }
+}
+
+int main()
+{
+ std::ios::sync_with_stdio(false);
+
+
+#line 102 "cppscan.cpp"
+ {
+ cs = Scanner_start;
+ ts = 0;
+ te = 0;
+ act = 0;
+ }
+
+#line 162 "cppscan.rl"
+
+ /* Do the first read. */
+ bool done = false;
+ while ( !done ) {
+ char *p = buf + have;
+ int space = BUFSIZE - have;
+
+ if ( space == 0 ) {
+ /* We filled up the buffer trying to scan a token. */
+ cerr << "OUT OF BUFFER SPACE" << endl;
+ exit(1);
+ }
+
+ cin.read( p, space );
+ int len = cin.gcount();
+ char *pe = p + len;
+ char *eof = 0;
+
+ /* If we see eof then append the EOF char. */
+ if ( cin.eof() ) {
+ eof = pe;
+ done = true;
+ }
+
+
+#line 136 "cppscan.cpp"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+tr0:
+#line 1 "NONE"
+ { switch( act ) {
+ case 0:
+ {{goto st0;}}
+ break;
+ case 3:
+ {{p = ((te))-1;}token( TK_Id );}
+ break;
+ case 4:
+ {{p = ((te))-1;}token( TK_Float );}
+ break;
+ case 5:
+ {{p = ((te))-1;}token( TK_IntegerDecimal );}
+ break;
+ case 6:
+ {{p = ((te))-1;}token( TK_IntegerOctal );}
+ break;
+ }
+ }
+ goto st12;
+tr2:
+#line 78 "cppscan.rl"
+ {te = p+1;{token( TK_Dlit );}}
+ goto st12;
+tr5:
+#line 76 "cppscan.rl"
+ {te = p+1;{token( TK_Slit );}}
+ goto st12;
+tr7:
+#line 124 "cppscan.rl"
+ {{p = ((te))-1;}{token( ts[0] );}}
+ goto st12;
+tr8:
+#line 121 "cppscan.rl"
+ {te = p+1;{token( TK_DotDotDot );}}
+ goto st12;
+tr12:
+#line 128 "cppscan.rl"
+ {te = p+1;}
+ goto st12;
+tr13:
+#line 90 "cppscan.rl"
+ {{p = ((te))-1;}{token( TK_IntegerDecimal );}}
+ goto st12;
+tr20:
+#line 124 "cppscan.rl"
+ {te = p+1;{token( ts[0] );}}
+ goto st12;
+tr36:
+#line 129 "cppscan.rl"
+ {te = p;p--;}
+ goto st12;
+tr37:
+#line 124 "cppscan.rl"
+ {te = p;p--;{token( ts[0] );}}
+ goto st12;
+tr38:
+#line 103 "cppscan.rl"
+ {te = p+1;{token( TK_NotEquals );}}
+ goto st12;
+tr39:
+#line 108 "cppscan.rl"
+ {te = p+1;{token( TK_PercentAssign );}}
+ goto st12;
+tr40:
+#line 104 "cppscan.rl"
+ {te = p+1;{token( TK_AndAnd );}}
+ goto st12;
+tr41:
+#line 111 "cppscan.rl"
+ {te = p+1;{token( TK_AmpAssign );}}
+ goto st12;
+tr42:
+#line 106 "cppscan.rl"
+ {te = p+1;{token( TK_MultAssign );}}
+ goto st12;
+tr43:
+#line 114 "cppscan.rl"
+ {te = p+1;{token( TK_PlusPlus );}}
+ goto st12;
+tr44:
+#line 109 "cppscan.rl"
+ {te = p+1;{token( TK_PlusAssign );}}
+ goto st12;
+tr45:
+#line 115 "cppscan.rl"
+ {te = p+1;{token( TK_MinusMinus );}}
+ goto st12;
+tr46:
+#line 110 "cppscan.rl"
+ {te = p+1;{token( TK_MinusAssign );}}
+ goto st12;
+tr48:
+#line 116 "cppscan.rl"
+ {te = p;p--;{token( TK_Arrow );}}
+ goto st12;
+tr49:
+#line 117 "cppscan.rl"
+ {te = p+1;{token( TK_ArrowStar );}}
+ goto st12;
+tr50:
+#line 118 "cppscan.rl"
+ {te = p+1;{token( TK_DotStar );}}
+ goto st12;
+tr53:
+#line 86 "cppscan.rl"
+ {te = p;p--;{token( TK_Float );}}
+ goto st12;
+tr55:
+#line 86 "cppscan.rl"
+ {te = p+1;{token( TK_Float );}}
+ goto st12;
+tr56:
+#line 127 "cppscan.rl"
+ {te = p+1;{ {goto st10;} }}
+ goto st12;
+tr57:
+#line 107 "cppscan.rl"
+ {te = p+1;{token( TK_DivAssign );}}
+ goto st12;
+tr58:
+#line 90 "cppscan.rl"
+ {te = p;p--;{token( TK_IntegerDecimal );}}
+ goto st12;
+tr62:
+#line 94 "cppscan.rl"
+ {te = p;p--;{token( TK_IntegerOctal );}}
+ goto st12;
+tr64:
+#line 94 "cppscan.rl"
+ {te = p+1;{token( TK_IntegerOctal );}}
+ goto st12;
+tr66:
+#line 90 "cppscan.rl"
+ {te = p+1;{token( TK_IntegerDecimal );}}
+ goto st12;
+tr67:
+#line 98 "cppscan.rl"
+ {te = p;p--;{token( TK_IntegerHex );}}
+ goto st12;
+tr69:
+#line 98 "cppscan.rl"
+ {te = p+1;{token( TK_IntegerHex );}}
+ goto st12;
+tr70:
+#line 101 "cppscan.rl"
+ {te = p+1;{token( TK_NameSep );}}
+ goto st12;
+tr71:
+#line 102 "cppscan.rl"
+ {te = p+1;{token( TK_EqualsEquals );}}
+ goto st12;
+tr72:
+#line 82 "cppscan.rl"
+ {te = p;p--;{token( TK_Id );}}
+ goto st12;
+tr73:
+#line 112 "cppscan.rl"
+ {te = p+1;{token( TK_CaretAssign );}}
+ goto st12;
+tr74:
+#line 113 "cppscan.rl"
+ {te = p+1;{token( TK_BarAssign );}}
+ goto st12;
+tr75:
+#line 105 "cppscan.rl"
+ {te = p+1;{token( TK_OrOr );}}
+ goto st12;
+st12:
+#line 1 "NONE"
+ {ts = 0;}
+#line 1 "NONE"
+ {act = 0;}
+ if ( ++p == pe )
+ goto _test_eof12;
+case 12:
+#line 1 "NONE"
+ {ts = p;}
+#line 321 "cppscan.cpp"
+ switch( (*p) ) {
+ case 33: goto st14;
+ case 34: goto st1;
+ case 37: goto st15;
+ case 38: goto st16;
+ case 39: goto st3;
+ case 42: goto st17;
+ case 43: goto st18;
+ case 45: goto st19;
+ case 46: goto tr26;
+ case 47: goto tr27;
+ case 48: goto tr28;
+ case 58: goto st33;
+ case 61: goto st34;
+ case 76: goto tr33;
+ case 94: goto st37;
+ case 95: goto st35;
+ case 124: goto st38;
+ }
+ if ( (*p) < 65 ) {
+ if ( (*p) < 49 ) {
+ if ( 35 <= (*p) && (*p) <= 44 )
+ goto tr20;
+ } else if ( (*p) > 57 ) {
+ if ( 59 <= (*p) && (*p) <= 64 )
+ goto tr20;
+ } else
+ goto tr29;
+ } else if ( (*p) > 90 ) {
+ if ( (*p) < 97 ) {
+ if ( 91 <= (*p) && (*p) <= 96 )
+ goto tr20;
+ } else if ( (*p) > 122 ) {
+ if ( 123 <= (*p) && (*p) <= 126 )
+ goto tr20;
+ } else
+ goto st35;
+ } else
+ goto st35;
+ goto st13;
+st13:
+ if ( ++p == pe )
+ goto _test_eof13;
+case 13:
+ if ( 33 <= (*p) && (*p) <= 126 )
+ goto tr36;
+ goto st13;
+st14:
+ if ( ++p == pe )
+ goto _test_eof14;
+case 14:
+ if ( (*p) == 61 )
+ goto tr38;
+ goto tr37;
+st1:
+ if ( ++p == pe )
+ goto _test_eof1;
+case 1:
+ switch( (*p) ) {
+ case 10: goto tr0;
+ case 34: goto tr2;
+ case 92: goto st2;
+ }
+ goto st1;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ goto st1;
+st15:
+ if ( ++p == pe )
+ goto _test_eof15;
+case 15:
+ if ( (*p) == 61 )
+ goto tr39;
+ goto tr37;
+st16:
+ if ( ++p == pe )
+ goto _test_eof16;
+case 16:
+ switch( (*p) ) {
+ case 38: goto tr40;
+ case 61: goto tr41;
+ }
+ goto tr37;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+ switch( (*p) ) {
+ case 10: goto tr0;
+ case 39: goto tr5;
+ case 92: goto st4;
+ }
+ goto st3;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ goto st3;
+st17:
+ if ( ++p == pe )
+ goto _test_eof17;
+case 17:
+ if ( (*p) == 61 )
+ goto tr42;
+ goto tr37;
+st18:
+ if ( ++p == pe )
+ goto _test_eof18;
+case 18:
+ switch( (*p) ) {
+ case 43: goto tr43;
+ case 61: goto tr44;
+ }
+ goto tr37;
+st19:
+ if ( ++p == pe )
+ goto _test_eof19;
+case 19:
+ switch( (*p) ) {
+ case 45: goto tr45;
+ case 61: goto tr46;
+ case 62: goto st20;
+ }
+ goto tr37;
+st20:
+ if ( ++p == pe )
+ goto _test_eof20;
+case 20:
+ if ( (*p) == 42 )
+ goto tr49;
+ goto tr48;
+tr26:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st21;
+st21:
+ if ( ++p == pe )
+ goto _test_eof21;
+case 21:
+#line 463 "cppscan.cpp"
+ switch( (*p) ) {
+ case 42: goto tr50;
+ case 46: goto st5;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr52;
+ goto tr37;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ if ( (*p) == 46 )
+ goto tr8;
+ goto tr7;
+tr52:
+#line 1 "NONE"
+ {te = p+1;}
+#line 86 "cppscan.rl"
+ {act = 4;}
+ goto st22;
+st22:
+ if ( ++p == pe )
+ goto _test_eof22;
+case 22:
+#line 488 "cppscan.cpp"
+ switch( (*p) ) {
+ case 69: goto st6;
+ case 70: goto tr55;
+ case 76: goto tr55;
+ case 101: goto st6;
+ case 102: goto tr55;
+ case 108: goto tr55;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr52;
+ goto tr53;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ switch( (*p) ) {
+ case 43: goto st7;
+ case 45: goto st7;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st23;
+ goto tr0;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st23;
+ goto tr0;
+st23:
+ if ( ++p == pe )
+ goto _test_eof23;
+case 23:
+ switch( (*p) ) {
+ case 70: goto tr55;
+ case 76: goto tr55;
+ case 102: goto tr55;
+ case 108: goto tr55;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st23;
+ goto tr53;
+tr27:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st24;
+st24:
+ if ( ++p == pe )
+ goto _test_eof24;
+case 24:
+#line 539 "cppscan.cpp"
+ switch( (*p) ) {
+ case 42: goto tr56;
+ case 47: goto st8;
+ case 61: goto tr57;
+ }
+ goto tr37;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+ if ( (*p) == 10 )
+ goto tr12;
+ goto st8;
+tr28:
+#line 1 "NONE"
+ {te = p+1;}
+#line 90 "cppscan.rl"
+ {act = 5;}
+ goto st25;
+st25:
+ if ( ++p == pe )
+ goto _test_eof25;
+case 25:
+#line 563 "cppscan.cpp"
+ switch( (*p) ) {
+ case 46: goto tr52;
+ case 69: goto st6;
+ case 76: goto st28;
+ case 85: goto st28;
+ case 101: goto st6;
+ case 108: goto st28;
+ case 117: goto st28;
+ case 120: goto st9;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr59;
+ goto tr58;
+tr59:
+#line 1 "NONE"
+ {te = p+1;}
+#line 94 "cppscan.rl"
+ {act = 6;}
+ goto st26;
+st26:
+ if ( ++p == pe )
+ goto _test_eof26;
+case 26:
+#line 587 "cppscan.cpp"
+ switch( (*p) ) {
+ case 46: goto tr52;
+ case 69: goto st6;
+ case 76: goto st27;
+ case 85: goto st27;
+ case 101: goto st6;
+ case 108: goto st27;
+ case 117: goto st27;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr59;
+ goto tr62;
+st27:
+ if ( ++p == pe )
+ goto _test_eof27;
+case 27:
+ switch( (*p) ) {
+ case 76: goto tr64;
+ case 85: goto tr64;
+ case 108: goto tr64;
+ case 117: goto tr64;
+ }
+ goto tr62;
+st28:
+ if ( ++p == pe )
+ goto _test_eof28;
+case 28:
+ switch( (*p) ) {
+ case 76: goto st29;
+ case 85: goto st29;
+ case 108: goto st29;
+ case 117: goto st29;
+ }
+ goto tr58;
+st29:
+ if ( ++p == pe )
+ goto _test_eof29;
+case 29:
+ switch( (*p) ) {
+ case 76: goto tr66;
+ case 85: goto tr66;
+ case 108: goto tr66;
+ case 117: goto tr66;
+ }
+ goto tr58;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st30;
+ } else if ( (*p) > 70 ) {
+ if ( 97 <= (*p) && (*p) <= 102 )
+ goto st30;
+ } else
+ goto st30;
+ goto tr13;
+st30:
+ if ( ++p == pe )
+ goto _test_eof30;
+case 30:
+ switch( (*p) ) {
+ case 76: goto st31;
+ case 85: goto st31;
+ case 108: goto st31;
+ case 117: goto st31;
+ }
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st30;
+ } else if ( (*p) > 70 ) {
+ if ( 97 <= (*p) && (*p) <= 102 )
+ goto st30;
+ } else
+ goto st30;
+ goto tr67;
+st31:
+ if ( ++p == pe )
+ goto _test_eof31;
+case 31:
+ switch( (*p) ) {
+ case 76: goto tr69;
+ case 85: goto tr69;
+ case 108: goto tr69;
+ case 117: goto tr69;
+ }
+ goto tr67;
+tr29:
+#line 1 "NONE"
+ {te = p+1;}
+#line 90 "cppscan.rl"
+ {act = 5;}
+ goto st32;
+st32:
+ if ( ++p == pe )
+ goto _test_eof32;
+case 32:
+#line 686 "cppscan.cpp"
+ switch( (*p) ) {
+ case 46: goto tr52;
+ case 69: goto st6;
+ case 76: goto st28;
+ case 85: goto st28;
+ case 101: goto st6;
+ case 108: goto st28;
+ case 117: goto st28;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr29;
+ goto tr58;
+st33:
+ if ( ++p == pe )
+ goto _test_eof33;
+case 33:
+ if ( (*p) == 58 )
+ goto tr70;
+ goto tr37;
+st34:
+ if ( ++p == pe )
+ goto _test_eof34;
+case 34:
+ if ( (*p) == 61 )
+ goto tr71;
+ goto tr37;
+st35:
+ if ( ++p == pe )
+ goto _test_eof35;
+case 35:
+ if ( (*p) == 95 )
+ goto st35;
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st35;
+ } else if ( (*p) > 90 ) {
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st35;
+ } else
+ goto st35;
+ goto tr72;
+tr33:
+#line 1 "NONE"
+ {te = p+1;}
+#line 82 "cppscan.rl"
+ {act = 3;}
+ goto st36;
+st36:
+ if ( ++p == pe )
+ goto _test_eof36;
+case 36:
+#line 738 "cppscan.cpp"
+ switch( (*p) ) {
+ case 34: goto st1;
+ case 39: goto st3;
+ case 95: goto st35;
+ }
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st35;
+ } else if ( (*p) > 90 ) {
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st35;
+ } else
+ goto st35;
+ goto tr72;
+st37:
+ if ( ++p == pe )
+ goto _test_eof37;
+case 37:
+ if ( (*p) == 61 )
+ goto tr73;
+ goto tr37;
+st38:
+ if ( ++p == pe )
+ goto _test_eof38;
+case 38:
+ switch( (*p) ) {
+ case 61: goto tr74;
+ case 124: goto tr75;
+ }
+ goto tr37;
+st10:
+#line 1 "NONE"
+ {ts = 0;}
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+#line 775 "cppscan.cpp"
+ if ( (*p) == 42 )
+ goto st11;
+ goto st10;
+st11:
+ if ( ++p == pe )
+ goto _test_eof11;
+case 11:
+ switch( (*p) ) {
+ case 42: goto st11;
+ case 47: goto tr17;
+ }
+ goto st10;
+tr17:
+#line 70 "cppscan.rl"
+ { {goto st12;} }
+ goto st39;
+st39:
+ if ( ++p == pe )
+ goto _test_eof39;
+case 39:
+#line 796 "cppscan.cpp"
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+ }
+ _test_eof12: cs = 12; goto _test_eof;
+ _test_eof13: cs = 13; goto _test_eof;
+ _test_eof14: cs = 14; goto _test_eof;
+ _test_eof1: cs = 1; goto _test_eof;
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof15: cs = 15; goto _test_eof;
+ _test_eof16: cs = 16; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof17: cs = 17; goto _test_eof;
+ _test_eof18: cs = 18; goto _test_eof;
+ _test_eof19: cs = 19; goto _test_eof;
+ _test_eof20: cs = 20; goto _test_eof;
+ _test_eof21: cs = 21; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof22: cs = 22; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof23: cs = 23; goto _test_eof;
+ _test_eof24: cs = 24; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof25: cs = 25; goto _test_eof;
+ _test_eof26: cs = 26; goto _test_eof;
+ _test_eof27: cs = 27; goto _test_eof;
+ _test_eof28: cs = 28; goto _test_eof;
+ _test_eof29: cs = 29; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+ _test_eof30: cs = 30; goto _test_eof;
+ _test_eof31: cs = 31; goto _test_eof;
+ _test_eof32: cs = 32; goto _test_eof;
+ _test_eof33: cs = 33; goto _test_eof;
+ _test_eof34: cs = 34; goto _test_eof;
+ _test_eof35: cs = 35; goto _test_eof;
+ _test_eof36: cs = 36; goto _test_eof;
+ _test_eof37: cs = 37; goto _test_eof;
+ _test_eof38: cs = 38; goto _test_eof;
+ _test_eof10: cs = 10; goto _test_eof;
+ _test_eof11: cs = 11; goto _test_eof;
+ _test_eof39: cs = 39; goto _test_eof;
+
+ _test_eof: {}
+ if ( p == eof )
+ {
+ switch ( cs ) {
+ case 13: goto tr36;
+ case 14: goto tr37;
+ case 1: goto tr0;
+ case 2: goto tr0;
+ case 15: goto tr37;
+ case 16: goto tr37;
+ case 3: goto tr0;
+ case 4: goto tr0;
+ case 17: goto tr37;
+ case 18: goto tr37;
+ case 19: goto tr37;
+ case 20: goto tr48;
+ case 21: goto tr37;
+ case 5: goto tr7;
+ case 22: goto tr53;
+ case 6: goto tr0;
+ case 7: goto tr0;
+ case 23: goto tr53;
+ case 24: goto tr37;
+ case 8: goto tr7;
+ case 25: goto tr58;
+ case 26: goto tr62;
+ case 27: goto tr62;
+ case 28: goto tr58;
+ case 29: goto tr58;
+ case 9: goto tr13;
+ case 30: goto tr67;
+ case 31: goto tr67;
+ case 32: goto tr58;
+ case 33: goto tr37;
+ case 34: goto tr37;
+ case 35: goto tr72;
+ case 36: goto tr72;
+ case 37: goto tr37;
+ case 38: goto tr37;
+ }
+ }
+
+ _out: {}
+ }
+
+#line 187 "cppscan.rl"
+
+ /* Check if we failed. */
+ if ( cs == Scanner_error ) {
+ /* Machine failed before finding a token. */
+ cerr << "PARSE ERROR" << endl;
+ exit(1);
+ }
+
+ /* Now set up the prefix. */
+ if ( ts == 0 )
+ have = 0;
+ else {
+ /* There is data that needs to be shifted over. */
+ have = pe - ts;
+ memmove( buf, ts, have );
+ te -= (ts-buf);
+ ts = buf;
+ }
+ }
+
+ return 0;
+}
diff --git a/examples/cppscan.lex b/examples/cppscan.lex
deleted file mode 100644
index fb66253..0000000
--- a/examples/cppscan.lex
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * flex equivalent to cppscan.rl
- */
-
-%{
-
-#include <stdio.h>
-
-#define TK_Dlit 256
-#define TK_Slit 257
-#define TK_Float 258
-#define TK_Id 259
-#define TK_NameSep 260
-#define TK_Arrow 261
-#define TK_PlusPlus 262
-#define TK_MinusMinus 263
-#define TK_ArrowStar 264
-#define TK_DotStar 265
-#define TK_ShiftLeft 266
-#define TK_ShiftRight 267
-#define TK_IntegerDecimal 268
-#define TK_IntegerOctal 269
-#define TK_IntegerHex 270
-#define TK_EqualsEquals 271
-#define TK_NotEquals 272
-#define TK_AndAnd 273
-#define TK_OrOr 274
-#define TK_MultAssign 275
-#define TK_DivAssign 276
-#define TK_PercentAssign 277
-#define TK_PlusAssign 278
-#define TK_MinusAssign 279
-#define TK_AmpAssign 280
-#define TK_CaretAssign 281
-#define TK_BarAssign 282
-#define TK_DotDotDot 283
-#define TK_Whitespace 284
-#define TK_Comment 285
-
-int line = 1, col = 1;
-
-void token( int tok, char *data, int len )
-{
- printf( "<%i> ", tok );
- for ( int i = 0; i < len; i++ )
- fputc( data[i], stdout );
- fputc( '\n', stdout );
-
- /* Count newlines and columns. This code is here mainly for having some
- * code in the token routine when commenting out the above output during
- * performance testing. */
- for ( int i = 0; i < len; i ++ ) {
- if ( data[i] == '\n' ) {
- line += 1;
- col = 1;
- }
- else {
- col += 1;
- }
- }
-}
-
-
-%}
-
-%x COMMENT
-
-FRACT_CONST [0-9]*\.[0-9]+|[0-9]+\.
-EXPONENT [eE][+\-]?[0-9]+
-FLOAT_SUFFIX [flFL]
-
-%%
-
- /* Single and double literals. */
-L?\'([^\'\\\n]|\\.)*\' {
- token( TK_Slit, yytext, yyleng );
-}
-
-L?\"([^\"\\\n]|\\.)*\" {
- token( TK_Dlit, yytext, yyleng );
-}
-
-[a-zA-Z_][a-zA-Z0-9_]* {
- token( TK_Id, yytext, yyleng );
-}
-
-{FRACT_CONST}{EXPONENT}?{FLOAT_SUFFIX}?|[0-9]+{EXPONENT}{FLOAT_SUFFIX}? {
- token( TK_Float, yytext, yyleng );
-}
-
-(0|[1-9][0-9]*)[ulUL]{0,3} {
- token( TK_IntegerDecimal, yytext, yyleng );
-}
-
-0[0-9]+[ulUL]{0,2} {
- token( TK_IntegerOctal, yytext, yyleng );
-}
-
-0x[0-9a-fA-F]+[ulUL]{0,2} {
- token( TK_IntegerHex, yytext, yyleng );
-}
-
-:: token( TK_NameSep, yytext, yyleng );
-== token( TK_EqualsEquals, yytext, yyleng );
-!= token( TK_NotEquals, yytext, yyleng );
-&& token( TK_AndAnd, yytext, yyleng );
-\|\| token( TK_OrOr, yytext, yyleng );
-\*= token( TK_MultAssign, yytext, yyleng );
-\/= token( TK_DivAssign, yytext, yyleng );
-%= token( TK_PercentAssign, yytext, yyleng );
-\+= token( TK_PlusAssign, yytext, yyleng );
--= token( TK_MinusAssign, yytext, yyleng );
-&= token( TK_AmpAssign, yytext, yyleng );
-^= token( TK_CaretAssign, yytext, yyleng );
-\|= token( TK_BarAssign, yytext, yyleng );
-\+\+ token( TK_PlusPlus, yytext, yyleng );
--- token( TK_MinusMinus, yytext, yyleng );
--> token( TK_Arrow, yytext, yyleng );
-->\* token( TK_ArrowStar, yytext, yyleng );
-\.\* token( TK_DotStar, yytext, yyleng );
-\.\.\. token( TK_DotDotDot, yytext, yyleng );
-
-\/\* BEGIN(COMMENT);
-<COMMENT>\*\/ BEGIN(INITIAL);
-<COMMENT>(.|\n) { }
-
-\/\/.*\n {}
-[^!-~]+ {}
-
-[!-/:-@\[-`{-~] token( yytext[0], yytext, yyleng );
-
-%%
-
-int yywrap()
-{
- /* Once the input is done, no more. */
- return 1;
-}
-
-int main()
-{
- yylex();
-}
diff --git a/examples/cppscan.rec b/examples/cppscan.rec
deleted file mode 100644
index 43f297d..0000000
--- a/examples/cppscan.rec
+++ /dev/null
@@ -1,183 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#define TK_Dlit 256
-#define TK_Slit 257
-#define TK_Float 258
-#define TK_Id 259
-#define TK_NameSep 260
-#define TK_Arrow 261
-#define TK_PlusPlus 262
-#define TK_MinusMinus 263
-#define TK_ArrowStar 264
-#define TK_DotStar 265
-#define TK_ShiftLeft 266
-#define TK_ShiftRight 267
-#define TK_IntegerDecimal 268
-#define TK_IntegerOctal 269
-#define TK_IntegerHex 270
-#define TK_EqualsEquals 271
-#define TK_NotEquals 272
-#define TK_AndAnd 273
-#define TK_OrOr 274
-#define TK_MultAssign 275
-#define TK_DivAssign 276
-#define TK_PercentAssign 277
-#define TK_PlusAssign 278
-#define TK_MinusAssign 279
-#define TK_AmpAssign 280
-#define TK_CaretAssign 281
-#define TK_BarAssign 282
-#define TK_DotDotDot 283
-#define TK_Whitespace 284
-#define TK_Comment 285
-
-int line = 1, col = 1;
-
-void token( int tok, char *data, int len )
-{
- printf( "<%i> ", tok );
- for ( int i = 0; i < len; i++ )
- fputc( data[i], stdout );
- fputc( '\n', stdout );
-
- /* Count newlines and columns. This code is here mainly for having some
- * code in the token routine when commenting out the above output during
- * performance testing. */
- for ( int i = 0; i < len; i ++ ) {
- if ( data[i] == '\n' ) {
- line += 1;
- col = 1;
- }
- else {
- col += 1;
- }
- }
-}
-
-#define BUFSIZE 8192
-char buf[BUFSIZE];
-
-void fill( int n )
-{
- printf("fill(%i)\n", n);
- exit(1);
-}
-
-int main()
-{
- char *start, *p = buf, *lim = buf, *marker;
- int len, have, want, shift;
- int done = 0;
-
-#define YYCTYPE char
-
-#define YYCURSOR p
-#define YYLIMIT lim
-#define YYMARKER marker
-
-#define YYFILL(n) { \
- if ( ! done ) { \
- have = lim-start; \
- if ( start > buf ) { \
- shift = start-buf; \
- memmove( buf, start, have ); \
- start -= shift; \
- p -= shift; \
- lim -= shift; \
- marker -= shift; \
- } \
- want = BUFSIZE - have - 1; \
- len = fread( lim, 1, want, stdin ); \
- lim += len; \
- if ( len < want ) { \
- *lim++ = 0; \
- done = 1; \
- } \
- } \
- }
-
-again:
- start = p;
-
-/*!re2c
-
-ANY = [\000-\377];
-FRACTCONST = ( [0-9]* "." [0-9]+ ) | [0-9]+ ".";
-EXPONENT = [eE] [+\-]? [0-9]+;
-FLOATSUFFIX = [flFL];
-
- "L"? "\'" ( ANY \ [\'\\\n] | "\\" ANY )* "\'" {
- token( TK_Slit, start, p-start );
- goto again;
- }
-
- "L"? "\"" ( ANY \ [\"\\\n] | "\\" ANY )* "\"" {
- token( TK_Dlit, start, p-start );
- goto again;
- }
-
- [a-zA-Z_][a-zA-Z0-9_]* {
- token( TK_Id, start, p-start );
- goto again;
- }
-
- ( FRACTCONST EXPONENT? FLOATSUFFIX? ) | ( [0-9]+ EXPONENT FLOATSUFFIX? ) {
- token( TK_Float, start, p-start );
- goto again;
- }
-
-
- ( "0" | [1-9][0-9]* ) [ulUL]* {
- token( TK_IntegerDecimal, start, p-start );
- goto again;
- }
-
- "0" [0-9]+ [ulUL]* {
- token( TK_IntegerOctal, start, p-start );
- goto again;
- }
-
- "0x" [0-9a-fA-F]+[ulUL]* {
- token( TK_IntegerHex, start, p-start );
- goto again;
- }
-
- "::" { token( TK_NameSep, start, p-start ); goto again; }
- "==" { token( TK_EqualsEquals, start, p-start ); goto again; }
- "!=" { token( TK_NotEquals, start, p-start ); goto again; }
- "&&" { token( TK_AndAnd, start, p-start ); goto again; }
- "||" { token( TK_OrOr, start, p-start ); goto again; }
- "*=" { token( TK_MultAssign, start, p-start ); goto again; }
- "/=" { token( TK_DivAssign, start, p-start ); goto again; }
- "%=" { token( TK_PercentAssign, start, p-start ); goto again; }
- "+=" { token( TK_PlusAssign, start, p-start ); goto again; }
- "-=" { token( TK_MinusAssign, start, p-start ); goto again; }
- "&=" { token( TK_AmpAssign, start, p-start ); goto again; }
- "^=" { token( TK_CaretAssign, start, p-start ); goto again; }
- "|=" { token( TK_BarAssign, start, p-start ); goto again; }
- "++" { token( TK_PlusPlus, start, p-start ); goto again; }
- "--" { token( TK_MinusMinus, start, p-start ); goto again; }
- "->" { token( TK_Arrow, start, p-start ); goto again; }
- "->*" { token( TK_ArrowStar, start, p-start ); goto again; }
- ".*" { token( TK_DotStar, start, p-start ); goto again; }
- "..." { token( TK_DotDotDot, start, p-start ); goto again; }
-
- "/*" { goto comment; }
- "//" (ANY\"\n")* "\n" { goto again; }
- [\001-\040\177]+ { goto again; }
-
- [\041-\057\072-\100\133-\140\173-\176] {
- token( *start, start, p-start );
- goto again;
- }
- "\000" { return 0; }
-*/
-
-comment:
-/*!re2c
- "*/" { goto again; }
- ANY { goto comment; }
-*/
-}
diff --git a/examples/format.c b/examples/format.c
new file mode 100644
index 0000000..768b063
--- /dev/null
+++ b/examples/format.c
@@ -0,0 +1,544 @@
+
+#line 1 "format.rl"
+/*
+ * Partial printf implementation.
+ */
+
+#define BUFLEN 1024
+#include <stdio.h>
+
+typedef void (*WriteFunc)( char *data, int len );
+
+struct format
+{
+ char buf[BUFLEN+1];
+ int buflen;
+ WriteFunc write;
+
+ int flags;
+ int width;
+ int prec;
+ int cs;
+};
+
+void do_conv( struct format *fsm, char c )
+{
+ printf( "flags: %x\n", fsm->flags );
+ printf( "width: %i\n", fsm->width );
+ printf( "prec: %i\n", fsm->prec );
+ printf( "conv: %c\n", c );
+ printf( "\n" );
+}
+
+#define FL_HASH 0x01
+#define FL_ZERO 0x02
+#define FL_DASH 0x04
+#define FL_SPACE 0x08
+#define FL_PLUS 0x10
+
+#define FL_HAS_WIDTH 0x0100
+#define FL_WIDTH_ARG 0x0200
+#define FL_HAS_PREC 0x0400
+#define FL_PREC_ARG 0x0800
+
+#define FL_LEN_H 0x010000
+#define FL_LEN_HH 0x020000
+#define FL_LEN_L 0x040000
+#define FL_LEN_LL 0x080000
+
+
+#line 137 "format.rl"
+
+
+
+#line 55 "format.c"
+static const int format_start = 11;
+static const int format_first_final = 11;
+static const int format_error = 0;
+
+static const int format_en_main = 11;
+
+
+#line 140 "format.rl"
+
+void format_init( struct format *fsm )
+{
+ fsm->buflen = 0;
+
+#line 69 "format.c"
+ {
+ fsm->cs = format_start;
+ }
+
+#line 145 "format.rl"
+}
+
+void format_execute( struct format *fsm, const char *data, int len, int isEof )
+{
+ const char *p = data;
+ const char *pe = data + len;
+ const char *eof = isEof ? pe : 0;
+
+
+#line 84 "format.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( fsm->cs )
+ {
+tr3:
+#line 113 "format.rl"
+ {
+ if ( fsm->buflen == BUFLEN ) {
+ fsm->write( fsm->buf, fsm->buflen );
+ fsm->buflen = 0;
+ }
+ fsm->buf[fsm->buflen++] = (*p);
+ }
+ goto st11;
+tr10:
+#line 99 "format.rl"
+ {
+ do_conv( fsm, (*p) );
+ }
+ goto st11;
+tr14:
+#line 63 "format.rl"
+ { fsm->flags |= FL_HAS_WIDTH; }
+#line 99 "format.rl"
+ {
+ do_conv( fsm, (*p) );
+ }
+ goto st11;
+tr19:
+#line 69 "format.rl"
+ { fsm->flags |= FL_HAS_PREC; }
+#line 99 "format.rl"
+ {
+ do_conv( fsm, (*p) );
+ }
+ goto st11;
+tr22:
+#line 86 "format.rl"
+ { fsm->flags |= FL_LEN_H; }
+#line 99 "format.rl"
+ {
+ do_conv( fsm, (*p) );
+ }
+ goto st11;
+tr24:
+#line 87 "format.rl"
+ { fsm->flags |= FL_LEN_L; }
+#line 99 "format.rl"
+ {
+ do_conv( fsm, (*p) );
+ }
+ goto st11;
+st11:
+ if ( ++p == pe )
+ goto _test_eof11;
+case 11:
+#line 142 "format.c"
+ if ( (*p) == 37 )
+ goto tr26;
+ goto tr3;
+tr26:
+#line 51 "format.rl"
+ {
+ fsm->flags = 0;
+ fsm->width = 0;
+ fsm->prec = 0;
+ }
+ goto st1;
+st1:
+ if ( ++p == pe )
+ goto _test_eof1;
+case 1:
+#line 158 "format.c"
+ switch( (*p) ) {
+ case 32: goto tr1;
+ case 35: goto tr2;
+ case 37: goto tr3;
+ case 42: goto tr4;
+ case 43: goto tr5;
+ case 45: goto tr6;
+ case 46: goto st4;
+ case 48: goto tr8;
+ case 88: goto tr10;
+ case 104: goto st6;
+ case 105: goto tr10;
+ case 108: goto st8;
+ case 115: goto tr10;
+ case 117: goto tr10;
+ case 120: goto tr10;
+ }
+ if ( (*p) < 99 ) {
+ if ( 49 <= (*p) && (*p) <= 57 )
+ goto tr9;
+ } else if ( (*p) > 100 ) {
+ if ( 111 <= (*p) && (*p) <= 112 )
+ goto tr10;
+ } else
+ goto tr10;
+ goto tr0;
+tr0:
+#line 128 "format.rl"
+ {
+ printf("ERROR ON CHAR: 0x%x\n", (*p) );
+ }
+ goto st0;
+#line 191 "format.c"
+st0:
+ fsm->cs = 0;
+ goto _out;
+tr1:
+#line 76 "format.rl"
+ { fsm->flags |= FL_SPACE; }
+ goto st2;
+tr2:
+#line 73 "format.rl"
+ { fsm->flags |= FL_HASH; }
+ goto st2;
+tr5:
+#line 77 "format.rl"
+ { fsm->flags |= FL_PLUS; }
+ goto st2;
+tr6:
+#line 75 "format.rl"
+ { fsm->flags |= FL_DASH; }
+ goto st2;
+tr8:
+#line 74 "format.rl"
+ { fsm->flags |= FL_ZERO; }
+ goto st2;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+#line 219 "format.c"
+ switch( (*p) ) {
+ case 32: goto tr1;
+ case 35: goto tr2;
+ case 42: goto tr4;
+ case 43: goto tr5;
+ case 45: goto tr6;
+ case 46: goto st4;
+ case 48: goto tr8;
+ case 88: goto tr10;
+ case 104: goto st6;
+ case 105: goto tr10;
+ case 108: goto st8;
+ case 115: goto tr10;
+ case 117: goto tr10;
+ case 120: goto tr10;
+ }
+ if ( (*p) < 99 ) {
+ if ( 49 <= (*p) && (*p) <= 57 )
+ goto tr9;
+ } else if ( (*p) > 100 ) {
+ if ( 111 <= (*p) && (*p) <= 112 )
+ goto tr10;
+ } else
+ goto tr10;
+ goto tr0;
+tr4:
+#line 62 "format.rl"
+ { fsm->flags |= FL_WIDTH_ARG; }
+ goto st3;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+#line 253 "format.c"
+ switch( (*p) ) {
+ case 46: goto tr13;
+ case 88: goto tr14;
+ case 104: goto tr15;
+ case 105: goto tr14;
+ case 108: goto tr16;
+ case 115: goto tr14;
+ case 117: goto tr14;
+ case 120: goto tr14;
+ }
+ if ( (*p) > 100 ) {
+ if ( 111 <= (*p) && (*p) <= 112 )
+ goto tr14;
+ } else if ( (*p) >= 99 )
+ goto tr14;
+ goto tr0;
+tr13:
+#line 63 "format.rl"
+ { fsm->flags |= FL_HAS_WIDTH; }
+ goto st4;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+#line 278 "format.c"
+ switch( (*p) ) {
+ case 42: goto tr17;
+ case 88: goto tr19;
+ case 104: goto tr20;
+ case 105: goto tr19;
+ case 108: goto tr21;
+ case 115: goto tr19;
+ case 117: goto tr19;
+ case 120: goto tr19;
+ }
+ if ( (*p) < 99 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr18;
+ } else if ( (*p) > 100 ) {
+ if ( 111 <= (*p) && (*p) <= 112 )
+ goto tr19;
+ } else
+ goto tr19;
+ goto tr0;
+tr17:
+#line 68 "format.rl"
+ { fsm->flags |= FL_PREC_ARG; }
+ goto st5;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+#line 306 "format.c"
+ switch( (*p) ) {
+ case 88: goto tr10;
+ case 104: goto st6;
+ case 105: goto tr10;
+ case 108: goto st8;
+ case 115: goto tr10;
+ case 117: goto tr10;
+ case 120: goto tr10;
+ }
+ if ( (*p) > 100 ) {
+ if ( 111 <= (*p) && (*p) <= 112 )
+ goto tr10;
+ } else if ( (*p) >= 99 )
+ goto tr10;
+ goto tr0;
+tr15:
+#line 63 "format.rl"
+ { fsm->flags |= FL_HAS_WIDTH; }
+ goto st6;
+tr20:
+#line 69 "format.rl"
+ { fsm->flags |= FL_HAS_PREC; }
+ goto st6;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+#line 334 "format.c"
+ switch( (*p) ) {
+ case 88: goto tr22;
+ case 104: goto tr23;
+ case 105: goto tr22;
+ case 115: goto tr22;
+ case 117: goto tr22;
+ case 120: goto tr22;
+ }
+ if ( (*p) > 100 ) {
+ if ( 111 <= (*p) && (*p) <= 112 )
+ goto tr22;
+ } else if ( (*p) >= 99 )
+ goto tr22;
+ goto tr0;
+tr23:
+#line 88 "format.rl"
+ { fsm->flags |= FL_LEN_HH; }
+ goto st7;
+tr25:
+#line 89 "format.rl"
+ { fsm->flags |= FL_LEN_LL; }
+ goto st7;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+#line 361 "format.c"
+ switch( (*p) ) {
+ case 88: goto tr10;
+ case 105: goto tr10;
+ case 115: goto tr10;
+ case 117: goto tr10;
+ case 120: goto tr10;
+ }
+ if ( (*p) > 100 ) {
+ if ( 111 <= (*p) && (*p) <= 112 )
+ goto tr10;
+ } else if ( (*p) >= 99 )
+ goto tr10;
+ goto tr0;
+tr16:
+#line 63 "format.rl"
+ { fsm->flags |= FL_HAS_WIDTH; }
+ goto st8;
+tr21:
+#line 69 "format.rl"
+ { fsm->flags |= FL_HAS_PREC; }
+ goto st8;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+#line 387 "format.c"
+ switch( (*p) ) {
+ case 88: goto tr24;
+ case 105: goto tr24;
+ case 108: goto tr25;
+ case 115: goto tr24;
+ case 117: goto tr24;
+ case 120: goto tr24;
+ }
+ if ( (*p) > 100 ) {
+ if ( 111 <= (*p) && (*p) <= 112 )
+ goto tr24;
+ } else if ( (*p) >= 99 )
+ goto tr24;
+ goto tr0;
+tr18:
+#line 67 "format.rl"
+ { fsm->prec = 10 * fsm->prec + ((*p)-'0'); }
+ goto st9;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+#line 410 "format.c"
+ switch( (*p) ) {
+ case 88: goto tr19;
+ case 104: goto tr20;
+ case 105: goto tr19;
+ case 108: goto tr21;
+ case 115: goto tr19;
+ case 117: goto tr19;
+ case 120: goto tr19;
+ }
+ if ( (*p) < 99 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr18;
+ } else if ( (*p) > 100 ) {
+ if ( 111 <= (*p) && (*p) <= 112 )
+ goto tr19;
+ } else
+ goto tr19;
+ goto tr0;
+tr9:
+#line 61 "format.rl"
+ { fsm->width = 10 * fsm->width + ((*p)-'0'); }
+ goto st10;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+#line 437 "format.c"
+ switch( (*p) ) {
+ case 46: goto tr13;
+ case 88: goto tr14;
+ case 104: goto tr15;
+ case 105: goto tr14;
+ case 108: goto tr16;
+ case 115: goto tr14;
+ case 117: goto tr14;
+ case 120: goto tr14;
+ }
+ if ( (*p) < 99 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr9;
+ } else if ( (*p) > 100 ) {
+ if ( 111 <= (*p) && (*p) <= 112 )
+ goto tr14;
+ } else
+ goto tr14;
+ goto tr0;
+ }
+ _test_eof11: fsm->cs = 11; goto _test_eof;
+ _test_eof1: fsm->cs = 1; goto _test_eof;
+ _test_eof2: fsm->cs = 2; goto _test_eof;
+ _test_eof3: fsm->cs = 3; goto _test_eof;
+ _test_eof4: fsm->cs = 4; goto _test_eof;
+ _test_eof5: fsm->cs = 5; goto _test_eof;
+ _test_eof6: fsm->cs = 6; goto _test_eof;
+ _test_eof7: fsm->cs = 7; goto _test_eof;
+ _test_eof8: fsm->cs = 8; goto _test_eof;
+ _test_eof9: fsm->cs = 9; goto _test_eof;
+ _test_eof10: fsm->cs = 10; goto _test_eof;
+
+ _test_eof: {}
+ if ( p == eof )
+ {
+ switch ( fsm->cs ) {
+ case 11:
+#line 121 "format.rl"
+ {
+ if ( fsm->buflen > 0 )
+ fsm->write( fsm->buf, fsm->buflen );
+ }
+ break;
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ case 10:
+#line 125 "format.rl"
+ {
+ printf("EOF IN FORMAT\n");
+ }
+#line 128 "format.rl"
+ {
+ printf("ERROR ON CHAR: 0x%x\n", (*p) );
+ }
+ break;
+#line 500 "format.c"
+ }
+ }
+
+ _out: {}
+ }
+
+#line 154 "format.rl"
+}
+
+int format_finish( struct format *fsm )
+{
+ if ( fsm->cs == format_error )
+ return -1;
+ if ( fsm->cs >= format_first_final )
+ return 1;
+ return 0;
+}
+
+
+#define INPUT_BUFSIZE 2048
+
+struct format fsm;
+char buf[INPUT_BUFSIZE];
+
+void write(char *data, int len )
+{
+ fwrite( data, 1, len, stdout );
+}
+
+int main()
+{
+ fsm.write = write;
+ format_init( &fsm );
+ while ( 1 ) {
+ int len = fread( buf, 1, INPUT_BUFSIZE, stdin );
+ int eof = len != INPUT_BUFSIZE;
+ format_execute( &fsm, buf, len, eof );
+ if ( eof )
+ break;
+ }
+ if ( format_finish( &fsm ) <= 0 )
+ printf("FAIL\n");
+ return 0;
+}
+
diff --git a/examples/gotocallret.cpp b/examples/gotocallret.cpp
new file mode 100644
index 0000000..18a9531
--- /dev/null
+++ b/examples/gotocallret.cpp
@@ -0,0 +1,282 @@
+
+#line 1 "gotocallret.rl"
+/*
+ * Demonstrate the use of goto, call and return. This machine expects either a
+ * lower case char or a digit as a command then a space followed by the command
+ * arg. If the command is a char, then the arg must be an a string of chars.
+ * If the command is a digit, then the arg must be a string of digits. This
+ * choice is determined by action code, rather than though transition
+ * desitinations.
+ */
+
+#include <iostream>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+using namespace std;
+
+struct GotoCallRet
+{
+ char comm;
+ int cs, top, stack[32];
+
+ int init( );
+ int execute( const char *data, int len, bool isEof );
+ int finish( );
+};
+
+
+#line 57 "gotocallret.rl"
+
+
+
+#line 35 "gotocallret.cpp"
+static const int GotoCallRet_start = 7;
+static const int GotoCallRet_first_final = 7;
+static const int GotoCallRet_error = 0;
+
+static const int GotoCallRet_en_garble_line = 3;
+static const int GotoCallRet_en_alp_comm = 5;
+static const int GotoCallRet_en_dig_comm = 6;
+static const int GotoCallRet_en_main = 7;
+
+
+#line 60 "gotocallret.rl"
+
+int GotoCallRet::init( )
+{
+
+#line 51 "gotocallret.cpp"
+ {
+ cs = GotoCallRet_start;
+ top = 0;
+ }
+
+#line 64 "gotocallret.rl"
+ return 1;
+}
+
+int GotoCallRet::execute( const char *data, int len, bool isEof )
+{
+ const char *p = data;
+ const char *pe = data + len;
+ const char *eof = isEof ? pe : 0;
+
+
+#line 68 "gotocallret.cpp"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ goto _resume;
+
+_again:
+ switch ( cs ) {
+ case 7: goto st7;
+ case 0: goto st0;
+ case 1: goto st1;
+ case 2: goto st2;
+ case 3: goto st3;
+ case 4: goto st4;
+ case 8: goto st8;
+ case 5: goto st5;
+ case 9: goto st9;
+ case 6: goto st6;
+ case 10: goto st10;
+ default: break;
+ }
+
+ if ( ++p == pe )
+ goto _test_eof;
+_resume:
+ switch ( cs )
+ {
+tr2:
+#line 52 "gotocallret.rl"
+ {cout << "correct command" << endl;}
+ goto st7;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+#line 103 "gotocallret.cpp"
+ if ( (*p) > 57 ) {
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto tr11;
+ } else if ( (*p) >= 48 )
+ goto tr11;
+ goto tr0;
+tr0:
+#line 56 "gotocallret.rl"
+ {p--;{goto st3;}}
+ goto st0;
+tr7:
+#line 38 "gotocallret.rl"
+ {p--;{cs = stack[--top];goto _again;}}
+ goto st0;
+tr9:
+#line 39 "gotocallret.rl"
+ {p--;{cs = stack[--top];goto _again;}}
+ goto st0;
+#line 122 "gotocallret.cpp"
+st0:
+cs = 0;
+ goto _out;
+tr11:
+#line 51 "gotocallret.rl"
+ {comm = (*p);}
+ goto st1;
+st1:
+ if ( ++p == pe )
+ goto _test_eof1;
+case 1:
+#line 134 "gotocallret.cpp"
+ if ( (*p) == 32 )
+ goto tr1;
+ goto tr0;
+tr1:
+#line 42 "gotocallret.rl"
+ {
+ if ( comm >= 'a' )
+ {stack[top++] = 2; goto st5;}
+ else
+ {stack[top++] = 2; goto st6;}
+ }
+ goto st2;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+#line 151 "gotocallret.cpp"
+ if ( (*p) == 10 )
+ goto tr2;
+ goto tr0;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+ if ( (*p) == 10 )
+ goto tr4;
+ goto tr3;
+tr3:
+#line 34 "gotocallret.rl"
+ {cout << "error: garbling line" << endl;}
+ goto st4;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+#line 170 "gotocallret.cpp"
+ if ( (*p) == 10 )
+ goto tr6;
+ goto st4;
+tr4:
+#line 34 "gotocallret.rl"
+ {cout << "error: garbling line" << endl;}
+#line 34 "gotocallret.rl"
+ {{goto st7;}}
+ goto st8;
+tr6:
+#line 34 "gotocallret.rl"
+ {{goto st7;}}
+ goto st8;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+#line 188 "gotocallret.cpp"
+ goto st0;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ if ( (*p) > 90 ) {
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st9;
+ } else if ( (*p) >= 65 )
+ goto st9;
+ goto tr7;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+ if ( (*p) > 90 ) {
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st9;
+ } else if ( (*p) >= 65 )
+ goto st9;
+ goto tr7;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st10;
+ goto tr9;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st10;
+ goto tr9;
+ }
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof1: cs = 1; goto _test_eof;
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof10: cs = 10; goto _test_eof;
+
+ _test_eof: {}
+ if ( p == eof )
+ {
+ switch ( cs ) {
+ case 5:
+#line 38 "gotocallret.rl"
+ {p--;{cs = stack[--top];goto _again;}}
+ break;
+ case 6:
+#line 39 "gotocallret.rl"
+ {p--;{cs = stack[--top];goto _again;}}
+ break;
+ case 1:
+ case 2:
+#line 56 "gotocallret.rl"
+ {p--;{goto st3;}}
+ break;
+#line 253 "gotocallret.cpp"
+ }
+ }
+
+ _out: {}
+ }
+
+#line 74 "gotocallret.rl"
+ if ( cs == GotoCallRet_error )
+ return -1;
+ if ( cs >= GotoCallRet_first_final )
+ return 1;
+ return 0;
+}
+
+#define BUFSIZE 1024
+
+int main()
+{
+ char buf[BUFSIZE];
+
+ GotoCallRet gcr;
+ gcr.init();
+ while ( fgets( buf, sizeof(buf), stdin ) != 0 )
+ gcr.execute( buf, strlen(buf), false );
+
+ gcr.execute( 0, 0, true );
+ if ( gcr.cs < GotoCallRet_first_final )
+ cerr << "gotocallret: error: parsing input" << endl;
+ return 0;
+}
diff --git a/examples/mailbox.cpp b/examples/mailbox.cpp
new file mode 100644
index 0000000..7e9c46e
--- /dev/null
+++ b/examples/mailbox.cpp
@@ -0,0 +1,1563 @@
+
+#line 1 "mailbox.rl"
+/*
+ * Parses unix mail boxes into headers and bodies.
+ */
+
+#include <iostream>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+using namespace std;
+
+#define BUFSIZE 2048
+
+/* A growable buffer for collecting headers. */
+struct Buffer
+{
+ Buffer() : data(0), allocated(0), length(0) { }
+ ~Buffer() { empty(); }
+
+ void append( char p ) {
+ if ( ++length > allocated )
+ upAllocate( length*2 );
+ data[length-1] = p;
+ }
+
+ void clear() { length = 0; }
+ void upAllocate( int len );
+ void empty();
+
+ char *data;
+ int allocated;
+ int length;
+};
+
+
+struct MailboxScanner
+{
+ Buffer headName;
+ Buffer headContent;
+
+ int cs, top, stack[1];
+
+ int init( );
+ int execute( const char *data, int len, bool isEof );
+ int finish( );
+};
+
+
+#line 137 "mailbox.rl"
+
+
+
+#line 56 "mailbox.cpp"
+static const int MailboxScanner_start = 100;
+static const int MailboxScanner_first_final = 100;
+static const int MailboxScanner_error = 0;
+
+static const int MailboxScanner_en_consumeHeader = 102;
+static const int MailboxScanner_en_printHeader = 103;
+static const int MailboxScanner_en_main = 100;
+
+
+#line 140 "mailbox.rl"
+
+int MailboxScanner::init( )
+{
+
+#line 71 "mailbox.cpp"
+ {
+ cs = MailboxScanner_start;
+ top = 0;
+ }
+
+#line 144 "mailbox.rl"
+ return 1;
+}
+
+int MailboxScanner::execute( const char *data, int len, bool isEof )
+{
+ const char *p = data;
+ const char *pe = data + len;
+ const char *eof = isEof ? pe : 0;
+
+
+#line 88 "mailbox.cpp"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ goto _resume;
+
+_again:
+ switch ( cs ) {
+ case 100: goto st100;
+ case 0: goto st0;
+ case 1: goto st1;
+ case 2: goto st2;
+ case 3: goto st3;
+ case 4: goto st4;
+ case 5: goto st5;
+ case 6: goto st6;
+ case 7: goto st7;
+ case 8: goto st8;
+ case 9: goto st9;
+ case 10: goto st10;
+ case 11: goto st11;
+ case 12: goto st12;
+ case 13: goto st13;
+ case 14: goto st14;
+ case 15: goto st15;
+ case 16: goto st16;
+ case 17: goto st17;
+ case 18: goto st18;
+ case 19: goto st19;
+ case 20: goto st20;
+ case 21: goto st21;
+ case 22: goto st22;
+ case 23: goto st23;
+ case 24: goto st24;
+ case 25: goto st25;
+ case 26: goto st26;
+ case 27: goto st27;
+ case 28: goto st28;
+ case 29: goto st29;
+ case 30: goto st30;
+ case 31: goto st31;
+ case 32: goto st32;
+ case 33: goto st33;
+ case 34: goto st34;
+ case 101: goto st101;
+ case 35: goto st35;
+ case 36: goto st36;
+ case 37: goto st37;
+ case 38: goto st38;
+ case 39: goto st39;
+ case 40: goto st40;
+ case 41: goto st41;
+ case 42: goto st42;
+ case 43: goto st43;
+ case 44: goto st44;
+ case 45: goto st45;
+ case 46: goto st46;
+ case 47: goto st47;
+ case 48: goto st48;
+ case 49: goto st49;
+ case 50: goto st50;
+ case 51: goto st51;
+ case 52: goto st52;
+ case 53: goto st53;
+ case 54: goto st54;
+ case 55: goto st55;
+ case 56: goto st56;
+ case 57: goto st57;
+ case 58: goto st58;
+ case 59: goto st59;
+ case 60: goto st60;
+ case 61: goto st61;
+ case 62: goto st62;
+ case 63: goto st63;
+ case 64: goto st64;
+ case 65: goto st65;
+ case 66: goto st66;
+ case 67: goto st67;
+ case 68: goto st68;
+ case 69: goto st69;
+ case 70: goto st70;
+ case 71: goto st71;
+ case 72: goto st72;
+ case 73: goto st73;
+ case 74: goto st74;
+ case 75: goto st75;
+ case 76: goto st76;
+ case 77: goto st77;
+ case 78: goto st78;
+ case 79: goto st79;
+ case 80: goto st80;
+ case 81: goto st81;
+ case 82: goto st82;
+ case 83: goto st83;
+ case 84: goto st84;
+ case 85: goto st85;
+ case 86: goto st86;
+ case 87: goto st87;
+ case 88: goto st88;
+ case 89: goto st89;
+ case 90: goto st90;
+ case 91: goto st91;
+ case 92: goto st92;
+ case 93: goto st93;
+ case 94: goto st94;
+ case 95: goto st95;
+ case 96: goto st96;
+ case 97: goto st97;
+ case 102: goto st102;
+ case 98: goto st98;
+ case 103: goto st103;
+ case 99: goto st99;
+ case 104: goto st104;
+ default: break;
+ }
+
+ if ( ++p == pe )
+ goto _test_eof;
+_resume:
+ switch ( cs )
+ {
+st100:
+ if ( ++p == pe )
+ goto _test_eof100;
+case 100:
+ if ( (*p) == 70 )
+ goto st1;
+ goto st0;
+tr101:
+#line 92 "mailbox.rl"
+ {
+ headContent.append(0);
+ cout << headContent.data << endl;
+ headContent.clear();
+ p--;
+ {cs = stack[--top];goto _again;}
+ }
+ goto st0;
+#line 226 "mailbox.cpp"
+st0:
+cs = 0;
+ goto _out;
+st1:
+ if ( ++p == pe )
+ goto _test_eof1;
+case 1:
+ if ( (*p) == 114 )
+ goto st2;
+ goto st0;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ if ( (*p) == 111 )
+ goto st3;
+ goto st0;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+ if ( (*p) == 109 )
+ goto st4;
+ goto st0;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ if ( (*p) == 32 )
+ goto st5;
+ goto st0;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ goto st5;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st7;
+ goto st5;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st8;
+ goto st5;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st9;
+ goto st5;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st10;
+ }
+ goto st5;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st11;
+ goto st5;
+st11:
+ if ( ++p == pe )
+ goto _test_eof11;
+case 11:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st12;
+ goto st5;
+st12:
+ if ( ++p == pe )
+ goto _test_eof12;
+case 12:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st13;
+ goto st5;
+st13:
+ if ( ++p == pe )
+ goto _test_eof13;
+case 13:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st14;
+ }
+ goto st5;
+st14:
+ if ( ++p == pe )
+ goto _test_eof14;
+case 14:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st15;
+ }
+ if ( (*p) > 57 ) {
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st11;
+ } else if ( (*p) >= 48 )
+ goto st97;
+ goto st5;
+st15:
+ if ( ++p == pe )
+ goto _test_eof15;
+case 15:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( (*p) > 57 ) {
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st7;
+ } else if ( (*p) >= 48 )
+ goto st16;
+ goto st5;
+st16:
+ if ( ++p == pe )
+ goto _test_eof16;
+case 16:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st17;
+ }
+ goto st5;
+st17:
+ if ( ++p == pe )
+ goto _test_eof17;
+case 17:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( (*p) > 57 ) {
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st7;
+ } else if ( (*p) >= 48 )
+ goto st18;
+ goto st5;
+st18:
+ if ( ++p == pe )
+ goto _test_eof18;
+case 18:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st19;
+ goto st5;
+st19:
+ if ( ++p == pe )
+ goto _test_eof19;
+case 19:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ case 58: goto st20;
+ }
+ goto st5;
+st20:
+ if ( ++p == pe )
+ goto _test_eof20;
+case 20:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st21;
+ goto st5;
+st21:
+ if ( ++p == pe )
+ goto _test_eof21;
+case 21:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st22;
+ goto st5;
+st22:
+ if ( ++p == pe )
+ goto _test_eof22;
+case 22:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st23;
+ case 58: goto st94;
+ }
+ goto st5;
+st23:
+ if ( ++p == pe )
+ goto _test_eof23;
+case 23:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ case 43: goto st24;
+ case 45: goto st24;
+ }
+ if ( (*p) > 57 ) {
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st92;
+ } else if ( (*p) >= 48 )
+ goto st84;
+ goto st5;
+st24:
+ if ( ++p == pe )
+ goto _test_eof24;
+case 24:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st25;
+ goto st5;
+st25:
+ if ( ++p == pe )
+ goto _test_eof25;
+case 25:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st26;
+ goto st5;
+st26:
+ if ( ++p == pe )
+ goto _test_eof26;
+case 26:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st27;
+ goto st5;
+st27:
+ if ( ++p == pe )
+ goto _test_eof27;
+case 27:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st28;
+ goto st5;
+st28:
+ if ( ++p == pe )
+ goto _test_eof28;
+case 28:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st29;
+ }
+ goto st5;
+st29:
+ if ( ++p == pe )
+ goto _test_eof29;
+case 29:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( (*p) > 57 ) {
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st7;
+ } else if ( (*p) >= 48 )
+ goto st30;
+ goto st5;
+st30:
+ if ( ++p == pe )
+ goto _test_eof30;
+case 30:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st31;
+ goto st5;
+st31:
+ if ( ++p == pe )
+ goto _test_eof31;
+case 31:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st32;
+ goto st5;
+st32:
+ if ( ++p == pe )
+ goto _test_eof32;
+case 32:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st33;
+ goto st5;
+st33:
+ if ( ++p == pe )
+ goto _test_eof33;
+case 33:
+ switch( (*p) ) {
+ case 10: goto st34;
+ case 32: goto st6;
+ }
+ goto st5;
+tr88:
+#line 108 "mailbox.rl"
+ {
+ headName.append(0);
+ if ( strcmp( headName.data, "From" ) == 0 ||
+ strcmp( headName.data, "To" ) == 0 ||
+ strcmp( headName.data, "Subject" ) == 0 )
+ {
+ /* Print the header name, then jump to a machine the will display
+ * the contents. */
+ cout << headName.data << ":";
+ headName.clear();
+ {stack[top++] = 34; goto st103;}
+ }
+
+ headName.clear();
+ {stack[top++] = 34; goto st102;}
+ }
+ goto st34;
+st34:
+ if ( ++p == pe )
+ goto _test_eof34;
+case 34:
+#line 603 "mailbox.cpp"
+ if ( (*p) == 10 )
+ goto tr38;
+ if ( (*p) > 57 ) {
+ if ( 59 <= (*p) && (*p) <= 126 )
+ goto tr39;
+ } else if ( (*p) >= 33 )
+ goto tr39;
+ goto st0;
+tr38:
+#line 55 "mailbox.rl"
+ { cout << endl; }
+ goto st101;
+st101:
+ if ( ++p == pe )
+ goto _test_eof101;
+case 101:
+#line 620 "mailbox.cpp"
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 70: goto st36;
+ }
+ goto st35;
+st35:
+ if ( ++p == pe )
+ goto _test_eof35;
+case 35:
+ if ( (*p) == 10 )
+ goto st101;
+ goto st35;
+st36:
+ if ( ++p == pe )
+ goto _test_eof36;
+case 36:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 114: goto st37;
+ }
+ goto st35;
+st37:
+ if ( ++p == pe )
+ goto _test_eof37;
+case 37:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 111: goto st38;
+ }
+ goto st35;
+st38:
+ if ( ++p == pe )
+ goto _test_eof38;
+case 38:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 109: goto st39;
+ }
+ goto st35;
+st39:
+ if ( ++p == pe )
+ goto _test_eof39;
+case 39:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st40;
+ }
+ goto st35;
+st40:
+ if ( ++p == pe )
+ goto _test_eof40;
+case 40:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ goto st40;
+st41:
+ if ( ++p == pe )
+ goto _test_eof41;
+case 41:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st42;
+ goto st40;
+st42:
+ if ( ++p == pe )
+ goto _test_eof42;
+case 42:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st43;
+ goto st40;
+st43:
+ if ( ++p == pe )
+ goto _test_eof43;
+case 43:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st44;
+ goto st40;
+st44:
+ if ( ++p == pe )
+ goto _test_eof44;
+case 44:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st45;
+ }
+ goto st40;
+st45:
+ if ( ++p == pe )
+ goto _test_eof45;
+case 45:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st46;
+ goto st40;
+st46:
+ if ( ++p == pe )
+ goto _test_eof46;
+case 46:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st47;
+ goto st40;
+st47:
+ if ( ++p == pe )
+ goto _test_eof47;
+case 47:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st48;
+ goto st40;
+st48:
+ if ( ++p == pe )
+ goto _test_eof48;
+case 48:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st49;
+ }
+ goto st40;
+st49:
+ if ( ++p == pe )
+ goto _test_eof49;
+case 49:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st50;
+ }
+ if ( (*p) > 57 ) {
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st46;
+ } else if ( (*p) >= 48 )
+ goto st82;
+ goto st40;
+st50:
+ if ( ++p == pe )
+ goto _test_eof50;
+case 50:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( (*p) > 57 ) {
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st42;
+ } else if ( (*p) >= 48 )
+ goto st51;
+ goto st40;
+st51:
+ if ( ++p == pe )
+ goto _test_eof51;
+case 51:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st52;
+ }
+ goto st40;
+st52:
+ if ( ++p == pe )
+ goto _test_eof52;
+case 52:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( (*p) > 57 ) {
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st42;
+ } else if ( (*p) >= 48 )
+ goto st53;
+ goto st40;
+st53:
+ if ( ++p == pe )
+ goto _test_eof53;
+case 53:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st54;
+ goto st40;
+st54:
+ if ( ++p == pe )
+ goto _test_eof54;
+case 54:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ case 58: goto st55;
+ }
+ goto st40;
+st55:
+ if ( ++p == pe )
+ goto _test_eof55;
+case 55:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st56;
+ goto st40;
+st56:
+ if ( ++p == pe )
+ goto _test_eof56;
+case 56:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st57;
+ goto st40;
+st57:
+ if ( ++p == pe )
+ goto _test_eof57;
+case 57:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st58;
+ case 58: goto st79;
+ }
+ goto st40;
+st58:
+ if ( ++p == pe )
+ goto _test_eof58;
+case 58:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ case 43: goto st59;
+ case 45: goto st59;
+ }
+ if ( (*p) > 57 ) {
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st77;
+ } else if ( (*p) >= 48 )
+ goto st69;
+ goto st40;
+st59:
+ if ( ++p == pe )
+ goto _test_eof59;
+case 59:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st60;
+ goto st40;
+st60:
+ if ( ++p == pe )
+ goto _test_eof60;
+case 60:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st61;
+ goto st40;
+st61:
+ if ( ++p == pe )
+ goto _test_eof61;
+case 61:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st62;
+ goto st40;
+st62:
+ if ( ++p == pe )
+ goto _test_eof62;
+case 62:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st63;
+ goto st40;
+st63:
+ if ( ++p == pe )
+ goto _test_eof63;
+case 63:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st64;
+ }
+ goto st40;
+st64:
+ if ( ++p == pe )
+ goto _test_eof64;
+case 64:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( (*p) > 57 ) {
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st42;
+ } else if ( (*p) >= 48 )
+ goto st65;
+ goto st40;
+st65:
+ if ( ++p == pe )
+ goto _test_eof65;
+case 65:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st66;
+ goto st40;
+st66:
+ if ( ++p == pe )
+ goto _test_eof66;
+case 66:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st67;
+ goto st40;
+st67:
+ if ( ++p == pe )
+ goto _test_eof67;
+case 67:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st68;
+ goto st40;
+st68:
+ if ( ++p == pe )
+ goto _test_eof68;
+case 68:
+ switch( (*p) ) {
+ case 10: goto st34;
+ case 32: goto st41;
+ }
+ goto st40;
+st69:
+ if ( ++p == pe )
+ goto _test_eof69;
+case 69:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st70;
+ goto st40;
+st70:
+ if ( ++p == pe )
+ goto _test_eof70;
+case 70:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st71;
+ goto st40;
+st71:
+ if ( ++p == pe )
+ goto _test_eof71;
+case 71:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st72;
+ goto st40;
+st72:
+ if ( ++p == pe )
+ goto _test_eof72;
+case 72:
+ switch( (*p) ) {
+ case 10: goto st34;
+ case 32: goto st73;
+ }
+ goto st40;
+st73:
+ if ( ++p == pe )
+ goto _test_eof73;
+case 73:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ case 43: goto st74;
+ case 45: goto st74;
+ }
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st75;
+ goto st40;
+st74:
+ if ( ++p == pe )
+ goto _test_eof74;
+case 74:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st65;
+ goto st40;
+st75:
+ if ( ++p == pe )
+ goto _test_eof75;
+case 75:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( (*p) > 90 ) {
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st43;
+ } else if ( (*p) >= 65 )
+ goto st76;
+ goto st40;
+st76:
+ if ( ++p == pe )
+ goto _test_eof76;
+case 76:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st68;
+ goto st40;
+st77:
+ if ( ++p == pe )
+ goto _test_eof77;
+case 77:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( (*p) > 90 ) {
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st43;
+ } else if ( (*p) >= 65 )
+ goto st78;
+ goto st40;
+st78:
+ if ( ++p == pe )
+ goto _test_eof78;
+case 78:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st63;
+ goto st40;
+st79:
+ if ( ++p == pe )
+ goto _test_eof79;
+case 79:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st80;
+ goto st40;
+st80:
+ if ( ++p == pe )
+ goto _test_eof80;
+case 80:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st81;
+ goto st40;
+st81:
+ if ( ++p == pe )
+ goto _test_eof81;
+case 81:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st58;
+ }
+ goto st40;
+st82:
+ if ( ++p == pe )
+ goto _test_eof82;
+case 82:
+ switch( (*p) ) {
+ case 10: goto st101;
+ case 32: goto st41;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st51;
+ goto st40;
+tr39:
+#line 52 "mailbox.rl"
+ { headName.append((*p)); }
+ goto st83;
+st83:
+ if ( ++p == pe )
+ goto _test_eof83;
+case 83:
+#line 1157 "mailbox.cpp"
+ if ( (*p) == 58 )
+ goto tr88;
+ if ( 33 <= (*p) && (*p) <= 126 )
+ goto tr39;
+ goto st0;
+st84:
+ if ( ++p == pe )
+ goto _test_eof84;
+case 84:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st85;
+ goto st5;
+st85:
+ if ( ++p == pe )
+ goto _test_eof85;
+case 85:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st86;
+ goto st5;
+st86:
+ if ( ++p == pe )
+ goto _test_eof86;
+case 86:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st87;
+ goto st5;
+st87:
+ if ( ++p == pe )
+ goto _test_eof87;
+case 87:
+ switch( (*p) ) {
+ case 10: goto st34;
+ case 32: goto st88;
+ }
+ goto st5;
+st88:
+ if ( ++p == pe )
+ goto _test_eof88;
+case 88:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ case 43: goto st89;
+ case 45: goto st89;
+ }
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st90;
+ goto st5;
+st89:
+ if ( ++p == pe )
+ goto _test_eof89;
+case 89:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st30;
+ goto st5;
+st90:
+ if ( ++p == pe )
+ goto _test_eof90;
+case 90:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( (*p) > 90 ) {
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st8;
+ } else if ( (*p) >= 65 )
+ goto st91;
+ goto st5;
+st91:
+ if ( ++p == pe )
+ goto _test_eof91;
+case 91:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st33;
+ goto st5;
+st92:
+ if ( ++p == pe )
+ goto _test_eof92;
+case 92:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( (*p) > 90 ) {
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st8;
+ } else if ( (*p) >= 65 )
+ goto st93;
+ goto st5;
+st93:
+ if ( ++p == pe )
+ goto _test_eof93;
+case 93:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 65 <= (*p) && (*p) <= 90 )
+ goto st28;
+ goto st5;
+st94:
+ if ( ++p == pe )
+ goto _test_eof94;
+case 94:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st95;
+ goto st5;
+st95:
+ if ( ++p == pe )
+ goto _test_eof95;
+case 95:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st96;
+ goto st5;
+st96:
+ if ( ++p == pe )
+ goto _test_eof96;
+case 96:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st23;
+ }
+ goto st5;
+st97:
+ if ( ++p == pe )
+ goto _test_eof97;
+case 97:
+ switch( (*p) ) {
+ case 10: goto st0;
+ case 32: goto st6;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st16;
+ goto st5;
+tr99:
+#line 86 "mailbox.rl"
+ {p--; {cs = stack[--top];goto _again;}}
+ goto st102;
+st102:
+ if ( ++p == pe )
+ goto _test_eof102;
+case 102:
+#line 1329 "mailbox.cpp"
+ if ( (*p) == 10 )
+ goto st98;
+ goto st102;
+st98:
+ if ( ++p == pe )
+ goto _test_eof98;
+case 98:
+ switch( (*p) ) {
+ case 9: goto st102;
+ case 32: goto st102;
+ }
+ goto tr99;
+tr106:
+#line 89 "mailbox.rl"
+ {headContent.append((*p));}
+ goto st103;
+tr108:
+#line 90 "mailbox.rl"
+ {headContent.append(' ');}
+#line 89 "mailbox.rl"
+ {headContent.append((*p));}
+ goto st103;
+st103:
+ if ( ++p == pe )
+ goto _test_eof103;
+case 103:
+#line 1356 "mailbox.cpp"
+ if ( (*p) == 10 )
+ goto st99;
+ goto tr106;
+st99:
+ if ( ++p == pe )
+ goto _test_eof99;
+case 99:
+ switch( (*p) ) {
+ case 9: goto st104;
+ case 32: goto st104;
+ }
+ goto tr101;
+st104:
+ if ( ++p == pe )
+ goto _test_eof104;
+case 104:
+ switch( (*p) ) {
+ case 9: goto st104;
+ case 10: goto st99;
+ case 32: goto st104;
+ }
+ goto tr108;
+ }
+ _test_eof100: cs = 100; goto _test_eof;
+ _test_eof1: cs = 1; goto _test_eof;
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+ _test_eof10: cs = 10; goto _test_eof;
+ _test_eof11: cs = 11; goto _test_eof;
+ _test_eof12: cs = 12; goto _test_eof;
+ _test_eof13: cs = 13; goto _test_eof;
+ _test_eof14: cs = 14; goto _test_eof;
+ _test_eof15: cs = 15; goto _test_eof;
+ _test_eof16: cs = 16; goto _test_eof;
+ _test_eof17: cs = 17; goto _test_eof;
+ _test_eof18: cs = 18; goto _test_eof;
+ _test_eof19: cs = 19; goto _test_eof;
+ _test_eof20: cs = 20; goto _test_eof;
+ _test_eof21: cs = 21; goto _test_eof;
+ _test_eof22: cs = 22; goto _test_eof;
+ _test_eof23: cs = 23; goto _test_eof;
+ _test_eof24: cs = 24; goto _test_eof;
+ _test_eof25: cs = 25; goto _test_eof;
+ _test_eof26: cs = 26; goto _test_eof;
+ _test_eof27: cs = 27; goto _test_eof;
+ _test_eof28: cs = 28; goto _test_eof;
+ _test_eof29: cs = 29; goto _test_eof;
+ _test_eof30: cs = 30; goto _test_eof;
+ _test_eof31: cs = 31; goto _test_eof;
+ _test_eof32: cs = 32; goto _test_eof;
+ _test_eof33: cs = 33; goto _test_eof;
+ _test_eof34: cs = 34; goto _test_eof;
+ _test_eof101: cs = 101; goto _test_eof;
+ _test_eof35: cs = 35; goto _test_eof;
+ _test_eof36: cs = 36; goto _test_eof;
+ _test_eof37: cs = 37; goto _test_eof;
+ _test_eof38: cs = 38; goto _test_eof;
+ _test_eof39: cs = 39; goto _test_eof;
+ _test_eof40: cs = 40; goto _test_eof;
+ _test_eof41: cs = 41; goto _test_eof;
+ _test_eof42: cs = 42; goto _test_eof;
+ _test_eof43: cs = 43; goto _test_eof;
+ _test_eof44: cs = 44; goto _test_eof;
+ _test_eof45: cs = 45; goto _test_eof;
+ _test_eof46: cs = 46; goto _test_eof;
+ _test_eof47: cs = 47; goto _test_eof;
+ _test_eof48: cs = 48; goto _test_eof;
+ _test_eof49: cs = 49; goto _test_eof;
+ _test_eof50: cs = 50; goto _test_eof;
+ _test_eof51: cs = 51; goto _test_eof;
+ _test_eof52: cs = 52; goto _test_eof;
+ _test_eof53: cs = 53; goto _test_eof;
+ _test_eof54: cs = 54; goto _test_eof;
+ _test_eof55: cs = 55; goto _test_eof;
+ _test_eof56: cs = 56; goto _test_eof;
+ _test_eof57: cs = 57; goto _test_eof;
+ _test_eof58: cs = 58; goto _test_eof;
+ _test_eof59: cs = 59; goto _test_eof;
+ _test_eof60: cs = 60; goto _test_eof;
+ _test_eof61: cs = 61; goto _test_eof;
+ _test_eof62: cs = 62; goto _test_eof;
+ _test_eof63: cs = 63; goto _test_eof;
+ _test_eof64: cs = 64; goto _test_eof;
+ _test_eof65: cs = 65; goto _test_eof;
+ _test_eof66: cs = 66; goto _test_eof;
+ _test_eof67: cs = 67; goto _test_eof;
+ _test_eof68: cs = 68; goto _test_eof;
+ _test_eof69: cs = 69; goto _test_eof;
+ _test_eof70: cs = 70; goto _test_eof;
+ _test_eof71: cs = 71; goto _test_eof;
+ _test_eof72: cs = 72; goto _test_eof;
+ _test_eof73: cs = 73; goto _test_eof;
+ _test_eof74: cs = 74; goto _test_eof;
+ _test_eof75: cs = 75; goto _test_eof;
+ _test_eof76: cs = 76; goto _test_eof;
+ _test_eof77: cs = 77; goto _test_eof;
+ _test_eof78: cs = 78; goto _test_eof;
+ _test_eof79: cs = 79; goto _test_eof;
+ _test_eof80: cs = 80; goto _test_eof;
+ _test_eof81: cs = 81; goto _test_eof;
+ _test_eof82: cs = 82; goto _test_eof;
+ _test_eof83: cs = 83; goto _test_eof;
+ _test_eof84: cs = 84; goto _test_eof;
+ _test_eof85: cs = 85; goto _test_eof;
+ _test_eof86: cs = 86; goto _test_eof;
+ _test_eof87: cs = 87; goto _test_eof;
+ _test_eof88: cs = 88; goto _test_eof;
+ _test_eof89: cs = 89; goto _test_eof;
+ _test_eof90: cs = 90; goto _test_eof;
+ _test_eof91: cs = 91; goto _test_eof;
+ _test_eof92: cs = 92; goto _test_eof;
+ _test_eof93: cs = 93; goto _test_eof;
+ _test_eof94: cs = 94; goto _test_eof;
+ _test_eof95: cs = 95; goto _test_eof;
+ _test_eof96: cs = 96; goto _test_eof;
+ _test_eof97: cs = 97; goto _test_eof;
+ _test_eof102: cs = 102; goto _test_eof;
+ _test_eof98: cs = 98; goto _test_eof;
+ _test_eof103: cs = 103; goto _test_eof;
+ _test_eof99: cs = 99; goto _test_eof;
+ _test_eof104: cs = 104; goto _test_eof;
+
+ _test_eof: {}
+ if ( p == eof )
+ {
+ switch ( cs ) {
+ case 104:
+#line 90 "mailbox.rl"
+ {headContent.append(' ');}
+ break;
+ case 99:
+#line 92 "mailbox.rl"
+ {
+ headContent.append(0);
+ cout << headContent.data << endl;
+ headContent.clear();
+ p--;
+ {cs = stack[--top];goto _again;}
+ }
+ break;
+#line 1503 "mailbox.cpp"
+ }
+ }
+
+ _out: {}
+ }
+
+#line 154 "mailbox.rl"
+
+ if ( cs == MailboxScanner_error )
+ return -1;
+ if ( cs >= MailboxScanner_first_final )
+ return 1;
+ return 0;
+}
+
+int MailboxScanner::finish( )
+{
+ if ( cs == MailboxScanner_error )
+ return -1;
+ if ( cs >= MailboxScanner_first_final )
+ return 1;
+ return 0;
+}
+
+
+void Buffer::empty()
+{
+ if ( data != 0 ) {
+ free( data );
+
+ data = 0;
+ length = 0;
+ allocated = 0;
+ }
+}
+
+void Buffer::upAllocate( int len )
+{
+ if ( data == 0 )
+ data = (char*) malloc( len );
+ else
+ data = (char*) realloc( data, len );
+ allocated = len;
+}
+
+MailboxScanner mailbox;
+char buf[BUFSIZE];
+
+int main()
+{
+ mailbox.init();
+ while ( 1 ) {
+ int len = fread( buf, 1, BUFSIZE, stdin );
+ mailbox.execute( buf, len, len != BUFSIZE );
+ if ( len != BUFSIZE )
+ break;
+ }
+ if ( mailbox.finish() <= 0 )
+ cerr << "mailbox: error parsing input" << endl;
+ return 0;
+}
diff --git a/examples/params.c b/examples/params.c
new file mode 100644
index 0000000..485e1c3
--- /dev/null
+++ b/examples/params.c
@@ -0,0 +1,374 @@
+
+#line 1 "params.rl"
+/*
+ * Parse command line arguments.
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#define BUFLEN 1024
+
+struct params
+{
+ char buffer[BUFLEN+1];
+ int buflen;
+ int cs;
+};
+
+
+#line 61 "params.rl"
+
+
+
+#line 25 "params.c"
+static const int params_start = 23;
+static const int params_first_final = 23;
+static const int params_error = 0;
+
+static const int params_en_main = 23;
+
+
+#line 64 "params.rl"
+
+void params_init( struct params *fsm )
+{
+ fsm->buflen = 0;
+
+#line 39 "params.c"
+ {
+ fsm->cs = params_start;
+ }
+
+#line 69 "params.rl"
+}
+
+void params_execute( struct params *fsm, const char *data, int len )
+{
+ const char *p = data;
+ const char *pe = data + len;
+
+
+#line 53 "params.c"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( fsm->cs )
+ {
+tr11:
+#line 38 "params.rl"
+ { printf("help\n"); }
+ goto st23;
+tr17:
+#line 39 "params.rl"
+ { printf("version\n"); }
+ goto st23;
+tr21:
+#line 30 "params.rl"
+ {
+ if ( fsm->buflen < BUFLEN )
+ fsm->buffer[fsm->buflen++] = 0;
+ }
+#line 42 "params.rl"
+ { printf("machine: \"%s\"\n", fsm->buffer); }
+ goto st23;
+tr25:
+#line 30 "params.rl"
+ {
+ if ( fsm->buflen < BUFLEN )
+ fsm->buffer[fsm->buflen++] = 0;
+ }
+#line 41 "params.rl"
+ { printf("spec: \"%s\"\n", fsm->buffer); }
+ goto st23;
+tr29:
+#line 30 "params.rl"
+ {
+ if ( fsm->buflen < BUFLEN )
+ fsm->buffer[fsm->buflen++] = 0;
+ }
+#line 40 "params.rl"
+ { printf("output: \"%s\"\n", fsm->buffer); }
+ goto st23;
+st23:
+ if ( ++p == pe )
+ goto _test_eof23;
+case 23:
+#line 98 "params.c"
+ if ( (*p) == 45 )
+ goto st1;
+ goto st0;
+st0:
+ fsm->cs = 0;
+ goto _out;
+st1:
+ if ( ++p == pe )
+ goto _test_eof1;
+case 1:
+ switch( (*p) ) {
+ case 45: goto st2;
+ case 63: goto st6;
+ case 72: goto st6;
+ case 77: goto st14;
+ case 83: goto st17;
+ case 104: goto st6;
+ case 111: goto st20;
+ case 118: goto st13;
+ }
+ goto st0;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ switch( (*p) ) {
+ case 104: goto st3;
+ case 118: goto st7;
+ }
+ goto st0;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+ if ( (*p) == 101 )
+ goto st4;
+ goto st0;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ if ( (*p) == 108 )
+ goto st5;
+ goto st0;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ if ( (*p) == 112 )
+ goto st6;
+ goto st0;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ if ( (*p) == 0 )
+ goto tr11;
+ goto st0;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+ if ( (*p) == 101 )
+ goto st8;
+ goto st0;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+ if ( (*p) == 114 )
+ goto st9;
+ goto st0;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+ if ( (*p) == 115 )
+ goto st10;
+ goto st0;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+ if ( (*p) == 105 )
+ goto st11;
+ goto st0;
+st11:
+ if ( ++p == pe )
+ goto _test_eof11;
+case 11:
+ if ( (*p) == 111 )
+ goto st12;
+ goto st0;
+st12:
+ if ( ++p == pe )
+ goto _test_eof12;
+case 12:
+ if ( (*p) == 110 )
+ goto st13;
+ goto st0;
+st13:
+ if ( ++p == pe )
+ goto _test_eof13;
+case 13:
+ if ( (*p) == 0 )
+ goto tr17;
+ goto st0;
+st14:
+ if ( ++p == pe )
+ goto _test_eof14;
+case 14:
+ if ( (*p) == 0 )
+ goto st16;
+ goto tr18;
+tr18:
+#line 36 "params.rl"
+ { fsm->buflen = 0; }
+#line 24 "params.rl"
+ {
+ if ( fsm->buflen < BUFLEN )
+ fsm->buffer[fsm->buflen++] = (*p);
+ }
+ goto st15;
+tr20:
+#line 24 "params.rl"
+ {
+ if ( fsm->buflen < BUFLEN )
+ fsm->buffer[fsm->buflen++] = (*p);
+ }
+ goto st15;
+st15:
+ if ( ++p == pe )
+ goto _test_eof15;
+case 15:
+#line 233 "params.c"
+ if ( (*p) == 0 )
+ goto tr21;
+ goto tr20;
+st16:
+ if ( ++p == pe )
+ goto _test_eof16;
+case 16:
+ if ( (*p) == 0 )
+ goto st0;
+ goto tr18;
+st17:
+ if ( ++p == pe )
+ goto _test_eof17;
+case 17:
+ if ( (*p) == 0 )
+ goto st19;
+ goto tr22;
+tr22:
+#line 36 "params.rl"
+ { fsm->buflen = 0; }
+#line 24 "params.rl"
+ {
+ if ( fsm->buflen < BUFLEN )
+ fsm->buffer[fsm->buflen++] = (*p);
+ }
+ goto st18;
+tr24:
+#line 24 "params.rl"
+ {
+ if ( fsm->buflen < BUFLEN )
+ fsm->buffer[fsm->buflen++] = (*p);
+ }
+ goto st18;
+st18:
+ if ( ++p == pe )
+ goto _test_eof18;
+case 18:
+#line 271 "params.c"
+ if ( (*p) == 0 )
+ goto tr25;
+ goto tr24;
+st19:
+ if ( ++p == pe )
+ goto _test_eof19;
+case 19:
+ if ( (*p) == 0 )
+ goto st0;
+ goto tr22;
+st20:
+ if ( ++p == pe )
+ goto _test_eof20;
+case 20:
+ if ( (*p) == 0 )
+ goto st22;
+ goto tr26;
+tr26:
+#line 36 "params.rl"
+ { fsm->buflen = 0; }
+#line 24 "params.rl"
+ {
+ if ( fsm->buflen < BUFLEN )
+ fsm->buffer[fsm->buflen++] = (*p);
+ }
+ goto st21;
+tr28:
+#line 24 "params.rl"
+ {
+ if ( fsm->buflen < BUFLEN )
+ fsm->buffer[fsm->buflen++] = (*p);
+ }
+ goto st21;
+st21:
+ if ( ++p == pe )
+ goto _test_eof21;
+case 21:
+#line 309 "params.c"
+ if ( (*p) == 0 )
+ goto tr29;
+ goto tr28;
+st22:
+ if ( ++p == pe )
+ goto _test_eof22;
+case 22:
+ if ( (*p) == 0 )
+ goto st0;
+ goto tr26;
+ }
+ _test_eof23: fsm->cs = 23; goto _test_eof;
+ _test_eof1: fsm->cs = 1; goto _test_eof;
+ _test_eof2: fsm->cs = 2; goto _test_eof;
+ _test_eof3: fsm->cs = 3; goto _test_eof;
+ _test_eof4: fsm->cs = 4; goto _test_eof;
+ _test_eof5: fsm->cs = 5; goto _test_eof;
+ _test_eof6: fsm->cs = 6; goto _test_eof;
+ _test_eof7: fsm->cs = 7; goto _test_eof;
+ _test_eof8: fsm->cs = 8; goto _test_eof;
+ _test_eof9: fsm->cs = 9; goto _test_eof;
+ _test_eof10: fsm->cs = 10; goto _test_eof;
+ _test_eof11: fsm->cs = 11; goto _test_eof;
+ _test_eof12: fsm->cs = 12; goto _test_eof;
+ _test_eof13: fsm->cs = 13; goto _test_eof;
+ _test_eof14: fsm->cs = 14; goto _test_eof;
+ _test_eof15: fsm->cs = 15; goto _test_eof;
+ _test_eof16: fsm->cs = 16; goto _test_eof;
+ _test_eof17: fsm->cs = 17; goto _test_eof;
+ _test_eof18: fsm->cs = 18; goto _test_eof;
+ _test_eof19: fsm->cs = 19; goto _test_eof;
+ _test_eof20: fsm->cs = 20; goto _test_eof;
+ _test_eof21: fsm->cs = 21; goto _test_eof;
+ _test_eof22: fsm->cs = 22; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 77 "params.rl"
+}
+
+int params_finish( struct params *fsm )
+{
+ if ( fsm->cs == params_error )
+ return -1;
+ if ( fsm->cs >= params_first_final )
+ return 1;
+ return 0;
+}
+
+#define BUFSIZE 2048
+
+int main( int argc, char **argv )
+{
+ int a;
+ struct params params;
+
+ params_init( &params );
+ for ( a = 1; a < argc; a++ )
+ params_execute( &params, argv[a], strlen(argv[a])+1 );
+ if ( params_finish( &params ) != 1 )
+ fprintf( stderr, "params: error processing arguments\n" );
+
+ return 0;
+}
diff --git a/examples/pullscan.c b/examples/pullscan.c
new file mode 100644
index 0000000..a72ca2f
--- /dev/null
+++ b/examples/pullscan.c
@@ -0,0 +1,294 @@
+
+#line 1 "pullscan.rl"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define BUFSIZE 4096
+
+typedef struct _Scanner {
+ /* Scanner state. */
+ int cs;
+ int act;
+ int have;
+ int curline;
+ char *ts;
+ char *te;
+ char *p;
+ char *pe;
+ char *eof;
+ FILE *file;
+ int done;
+
+ /* Token data */
+ char *data;
+ int len;
+ int value;
+
+ char buf[BUFSIZE];
+} Scanner;
+
+
+
+#line 34 "pullscan.c"
+static const int Scanner_start = 2;
+static const int Scanner_first_final = 2;
+static const int Scanner_error = -1;
+
+static const int Scanner_en_main = 2;
+
+
+#line 33 "pullscan.rl"
+
+
+void scan_init( Scanner *s, FILE *file )
+{
+ memset (s, '\0', sizeof(Scanner));
+ s->curline = 1;
+ s->file = file;
+ s->eof = 0;
+
+#line 52 "pullscan.c"
+ {
+ s->cs = Scanner_start;
+ s->ts = 0;
+ s->te = 0;
+ s->act = 0;
+ }
+
+#line 42 "pullscan.rl"
+}
+
+#define TK_NO_TOKEN (-1)
+#define TK_ERR 128
+#define TK_EOF 129
+#define TK_Identifier 130
+#define TK_Number 131
+#define TK_String 132
+
+#define ret_tok( _tok ) token = _tok; s->data = s->ts
+
+int scan( Scanner *s )
+{
+ int token = TK_NO_TOKEN;
+ int space, readlen;
+
+ while ( 1 ) {
+ if ( s->p == s->pe ) {
+ printf("scanner: need more data\n");
+
+ if ( s->ts == 0 )
+ s->have = 0;
+ else {
+ /* There is data that needs to be shifted over. */
+ printf("scanner: buffer broken mid token\n");
+ s->have = s->pe - s->ts;
+ memmove( s->buf, s->ts, s->have );
+ s->te -= (s->ts-s->buf);
+ s->ts = s->buf;
+ }
+
+ s->p = s->buf + s->have;
+ space = BUFSIZE - s->have;
+
+ if ( space == 0 ) {
+ /* We filled up the buffer trying to scan a token. */
+ printf("scanner: out of buffer space\n");
+ return TK_ERR;
+ }
+
+ if ( s->done ) {
+ printf("scanner: end of file\n");
+ s->p[0] = 0;
+ readlen = 1;
+ }
+ else {
+ readlen = fread( s->p, 1, space, s->file );
+ if ( readlen < space )
+ s->done = 1;
+ }
+
+ s->pe = s->p + readlen;
+ }
+
+
+#line 116 "pullscan.c"
+ {
+ if ( ( s->p) == ( s->pe) )
+ goto _test_eof;
+ switch ( s->cs )
+ {
+tr0:
+#line 125 "pullscan.rl"
+ {{( s->p) = (( s->te))-1;}{ ret_tok( *s->p ); {( s->p)++; s->cs = 2; goto _out;} }}
+ goto st2;
+tr2:
+#line 113 "pullscan.rl"
+ { s->te = ( s->p)+1;{ ret_tok( TK_String ); {( s->p)++; s->cs = 2; goto _out;} }}
+ goto st2;
+tr4:
+#line 125 "pullscan.rl"
+ { s->te = ( s->p)+1;{ ret_tok( *s->p ); {( s->p)++; s->cs = 2; goto _out;} }}
+ goto st2;
+tr5:
+#line 121 "pullscan.rl"
+ { s->te = ( s->p)+1;{ ret_tok( TK_EOF ); {( s->p)++; s->cs = 2; goto _out;} }}
+ goto st2;
+tr6:
+#line 110 "pullscan.rl"
+ { s->te = ( s->p)+1;}
+ goto st2;
+tr10:
+#line 125 "pullscan.rl"
+ { s->te = ( s->p);( s->p)--;{ ret_tok( *s->p ); {( s->p)++; s->cs = 2; goto _out;} }}
+ goto st2;
+tr11:
+#line 117 "pullscan.rl"
+ { s->te = ( s->p);( s->p)--;{ ret_tok( TK_Number ); {( s->p)++; s->cs = 2; goto _out;} }}
+ goto st2;
+tr12:
+#line 107 "pullscan.rl"
+ { s->te = ( s->p);( s->p)--;{ ret_tok( TK_Identifier ); {( s->p)++; s->cs = 2; goto _out;} }}
+ goto st2;
+st2:
+#line 1 "NONE"
+ { s->ts = 0;}
+ if ( ++( s->p) == ( s->pe) )
+ goto _test_eof2;
+case 2:
+#line 1 "NONE"
+ { s->ts = ( s->p);}
+#line 162 "pullscan.c"
+ switch( (*( s->p)) ) {
+ case 0: goto tr5;
+ case 32: goto tr6;
+ case 34: goto tr7;
+ case 95: goto st5;
+ }
+ if ( (*( s->p)) < 48 ) {
+ if ( 9 <= (*( s->p)) && (*( s->p)) <= 10 )
+ goto tr6;
+ } else if ( (*( s->p)) > 57 ) {
+ if ( (*( s->p)) > 90 ) {
+ if ( 97 <= (*( s->p)) && (*( s->p)) <= 122 )
+ goto st5;
+ } else if ( (*( s->p)) >= 65 )
+ goto st5;
+ } else
+ goto st4;
+ goto tr4;
+tr7:
+#line 1 "NONE"
+ { s->te = ( s->p)+1;}
+ goto st3;
+st3:
+ if ( ++( s->p) == ( s->pe) )
+ goto _test_eof3;
+case 3:
+#line 189 "pullscan.c"
+ switch( (*( s->p)) ) {
+ case 34: goto tr2;
+ case 92: goto st1;
+ }
+ goto st0;
+st0:
+ if ( ++( s->p) == ( s->pe) )
+ goto _test_eof0;
+case 0:
+ switch( (*( s->p)) ) {
+ case 34: goto tr2;
+ case 92: goto st1;
+ }
+ goto st0;
+st1:
+ if ( ++( s->p) == ( s->pe) )
+ goto _test_eof1;
+case 1:
+ goto st0;
+st4:
+ if ( ++( s->p) == ( s->pe) )
+ goto _test_eof4;
+case 4:
+ if ( 48 <= (*( s->p)) && (*( s->p)) <= 57 )
+ goto st4;
+ goto tr11;
+st5:
+ if ( ++( s->p) == ( s->pe) )
+ goto _test_eof5;
+case 5:
+ if ( (*( s->p)) == 95 )
+ goto st5;
+ if ( (*( s->p)) < 65 ) {
+ if ( 48 <= (*( s->p)) && (*( s->p)) <= 57 )
+ goto st5;
+ } else if ( (*( s->p)) > 90 ) {
+ if ( 97 <= (*( s->p)) && (*( s->p)) <= 122 )
+ goto st5;
+ } else
+ goto st5;
+ goto tr12;
+ }
+ _test_eof2: s->cs = 2; goto _test_eof;
+ _test_eof3: s->cs = 3; goto _test_eof;
+ _test_eof0: s->cs = 0; goto _test_eof;
+ _test_eof1: s->cs = 1; goto _test_eof;
+ _test_eof4: s->cs = 4; goto _test_eof;
+ _test_eof5: s->cs = 5; goto _test_eof;
+
+ _test_eof: {}
+ if ( ( s->p) == ( s->eof) )
+ {
+ switch ( s->cs ) {
+ case 3: goto tr10;
+ case 0: goto tr0;
+ case 1: goto tr0;
+ case 4: goto tr11;
+ case 5: goto tr12;
+ }
+ }
+
+ _out: {}
+ }
+
+#line 130 "pullscan.rl"
+
+
+ if ( s->cs == Scanner_error )
+ return TK_ERR;
+
+ if ( token != TK_NO_TOKEN ) {
+ s->len = s->p - s->data;
+ return token;
+ }
+ }
+}
+
+
+int main (int argc, char** argv)
+{
+ Scanner ss;
+ int tok;
+
+ scan_init(&ss, stdin);
+
+ while ( 1 ) {
+ tok = scan (&ss);
+ if ( tok == TK_EOF ) {
+ printf ("parser: EOF\n");
+ break;
+ }
+ else if ( tok == TK_ERR ) {
+ printf ("parser: ERR\n");
+ break;
+ }
+ else {
+ printf ("parser: %d \"", tok);
+ fwrite ( ss.data, 1, ss.len, stdout );
+ printf ("\"\n" );
+ }
+ }
+
+ return 0;
+}
+
+
diff --git a/examples/rlscan.cpp b/examples/rlscan.cpp
new file mode 100644
index 0000000..1c428f8
--- /dev/null
+++ b/examples/rlscan.cpp
@@ -0,0 +1,1055 @@
+
+#line 1 "rlscan.rl"
+/*
+ * Lexes Ragel input files.
+ */
+
+#include <iostream>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+using namespace std;
+
+void escapeXML( char *data )
+{
+ while ( *data != 0 ) {
+ switch ( *data ) {
+ case '<': cout << "&lt;"; break;
+ case '>': cout << "&gt;"; break;
+ case '&': cout << "&amp;"; break;
+ default: cout << *data; break;
+ }
+ data += 1;
+ }
+}
+
+void escapeXML( char c )
+{
+ switch ( c ) {
+ case '<': cout << "&lt;"; break;
+ case '>': cout << "&gt;"; break;
+ case '&': cout << "&amp;"; break;
+ default: cout << c; break;
+ }
+}
+
+void escapeXML( char *data, int len )
+{
+ for ( char *end = data + len; data != end; data++ ) {
+ switch ( *data ) {
+ case '<': cout << "&lt;"; break;
+ case '>': cout << "&gt;"; break;
+ case '&': cout << "&amp;"; break;
+ default: cout << *data; break;
+ }
+ }
+}
+
+inline void write( const char *data )
+{
+ cout << data;
+}
+
+inline void write( char c )
+{
+ cout << c;
+}
+
+inline void write( char *data, int len )
+{
+ cout.write( data, len );
+}
+
+
+
+#line 237 "rlscan.rl"
+
+
+
+#line 71 "rlscan.cpp"
+static const int RagelScan_start = 24;
+static const int RagelScan_error = 0;
+
+static const int RagelScan_en_c_comment = 6;
+static const int RagelScan_en_ilscan = 31;
+static const int RagelScan_en_rlscan = 35;
+static const int RagelScan_en_main = 24;
+
+
+#line 240 "rlscan.rl"
+
+#define BUFSIZE 2048
+
+int main()
+{
+ std::ios::sync_with_stdio(false);
+
+ int cs, act;
+ char *ts, *te;
+ int stack[1], top;
+
+ static char inbuf[BUFSIZE];
+ bool single_line = false;
+ int inline_depth = 0;
+
+
+#line 98 "rlscan.cpp"
+ {
+ cs = RagelScan_start;
+ top = 0;
+ ts = 0;
+ te = 0;
+ act = 0;
+ }
+
+#line 256 "rlscan.rl"
+
+ bool done = false;
+ int have = 0;
+ while ( !done ) {
+ /* How much space is in the buffer? */
+ int space = BUFSIZE - have;
+ if ( space == 0 ) {
+ /* Buffer is full. */
+ cerr << "TOKEN TOO BIG" << endl;
+ exit(1);
+ }
+
+ /* Read in a block. */
+ char *p = inbuf + have;
+ cin.read( p, space );
+ int len = cin.gcount();
+ char *pe = p + len;
+ char *eof = 0;
+
+ /* Check for EOF. */
+ if ( len == 0 ) {
+ eof = pe;
+ done = true;
+ }
+
+
+#line 134 "rlscan.cpp"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ goto _resume;
+
+_again:
+ switch ( cs ) {
+ case 24: goto st24;
+ case 25: goto st25;
+ case 1: goto st1;
+ case 2: goto st2;
+ case 26: goto st26;
+ case 27: goto st27;
+ case 28: goto st28;
+ case 3: goto st3;
+ case 4: goto st4;
+ case 29: goto st29;
+ case 5: goto st5;
+ case 6: goto st6;
+ case 0: goto st0;
+ case 7: goto st7;
+ case 30: goto st30;
+ case 31: goto st31;
+ case 32: goto st32;
+ case 8: goto st8;
+ case 9: goto st9;
+ case 33: goto st33;
+ case 10: goto st10;
+ case 11: goto st11;
+ case 34: goto st34;
+ case 12: goto st12;
+ case 35: goto st35;
+ case 36: goto st36;
+ case 13: goto st13;
+ case 14: goto st14;
+ case 37: goto st37;
+ case 15: goto st15;
+ case 38: goto st38;
+ case 16: goto st16;
+ case 17: goto st17;
+ case 39: goto st39;
+ case 18: goto st18;
+ case 19: goto st19;
+ case 40: goto st40;
+ case 41: goto st41;
+ case 20: goto st20;
+ case 42: goto st42;
+ case 43: goto st43;
+ case 44: goto st44;
+ case 21: goto st21;
+ case 22: goto st22;
+ case 45: goto st45;
+ case 23: goto st23;
+ default: break;
+ }
+
+ if ( ++p == pe )
+ goto _test_eof;
+_resume:
+ switch ( cs )
+ {
+tr0:
+#line 230 "rlscan.rl"
+ {{p = ((te))-1;}{
+ escapeXML( *ts );
+ }}
+ goto st24;
+tr2:
+#line 79 "rlscan.rl"
+ {te = p+1;{
+ escapeXML( ts, te-ts );
+ }}
+ goto st24;
+tr5:
+#line 79 "rlscan.rl"
+ {te = p+1;{
+ escapeXML( ts, te-ts );
+ }}
+ goto st24;
+tr8:
+#line 79 "rlscan.rl"
+ {te = p+1;{
+ escapeXML( ts, te-ts );
+ }}
+ goto st24;
+tr40:
+#line 230 "rlscan.rl"
+ {te = p+1;{
+ escapeXML( *ts );
+ }}
+ goto st24;
+tr41:
+#line 235 "rlscan.rl"
+ {te = p+1;}
+ goto st24;
+tr46:
+#line 230 "rlscan.rl"
+ {te = p;p--;{
+ escapeXML( *ts );
+ }}
+ goto st24;
+tr48:
+#line 224 "rlscan.rl"
+ {te = p;p--;{
+ write( "<section>\n" );
+ single_line = true;
+ {goto st35;}
+ }}
+ goto st24;
+tr49:
+#line 218 "rlscan.rl"
+ {te = p+1;{
+ write( "<section>\n" );
+ single_line = false;
+ {goto st35;}
+ }}
+ goto st24;
+tr50:
+#line 211 "rlscan.rl"
+ {te = p+1;{
+ escapeXML( ts, te-ts );
+ {stack[top++] = 24; goto st6;}
+ }}
+ goto st24;
+st24:
+#line 1 "NONE"
+ {ts = 0;}
+ if ( ++p == pe )
+ goto _test_eof24;
+case 24:
+#line 1 "NONE"
+ {ts = p;}
+#line 267 "rlscan.cpp"
+ switch( (*p) ) {
+ case 0: goto tr41;
+ case 34: goto tr42;
+ case 37: goto st26;
+ case 39: goto tr44;
+ case 47: goto tr45;
+ }
+ goto tr40;
+tr42:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st25;
+st25:
+ if ( ++p == pe )
+ goto _test_eof25;
+case 25:
+#line 284 "rlscan.cpp"
+ switch( (*p) ) {
+ case 34: goto tr2;
+ case 92: goto st2;
+ }
+ goto st1;
+st1:
+ if ( ++p == pe )
+ goto _test_eof1;
+case 1:
+ switch( (*p) ) {
+ case 34: goto tr2;
+ case 92: goto st2;
+ }
+ goto st1;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ goto st1;
+st26:
+ if ( ++p == pe )
+ goto _test_eof26;
+case 26:
+ if ( (*p) == 37 )
+ goto st27;
+ goto tr46;
+st27:
+ if ( ++p == pe )
+ goto _test_eof27;
+case 27:
+ if ( (*p) == 123 )
+ goto tr49;
+ goto tr48;
+tr44:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st28;
+st28:
+ if ( ++p == pe )
+ goto _test_eof28;
+case 28:
+#line 326 "rlscan.cpp"
+ switch( (*p) ) {
+ case 39: goto tr5;
+ case 92: goto st4;
+ }
+ goto st3;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+ switch( (*p) ) {
+ case 39: goto tr5;
+ case 92: goto st4;
+ }
+ goto st3;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ goto st3;
+tr45:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st29;
+st29:
+ if ( ++p == pe )
+ goto _test_eof29;
+case 29:
+#line 354 "rlscan.cpp"
+ switch( (*p) ) {
+ case 42: goto tr50;
+ case 47: goto st5;
+ }
+ goto tr46;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ if ( (*p) == 10 )
+ goto tr8;
+ goto st5;
+tr9:
+#line 76 "rlscan.rl"
+ { escapeXML( (*p) ); }
+ goto st6;
+st6:
+#line 1 "NONE"
+ {ts = 0;}
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+#line 377 "rlscan.cpp"
+ switch( (*p) ) {
+ case 0: goto st0;
+ case 42: goto tr11;
+ }
+ goto tr9;
+st0:
+cs = 0;
+ goto _out;
+tr11:
+#line 76 "rlscan.rl"
+ { escapeXML( (*p) ); }
+ goto st7;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+#line 394 "rlscan.cpp"
+ switch( (*p) ) {
+ case 0: goto st0;
+ case 42: goto tr11;
+ case 47: goto tr12;
+ }
+ goto tr9;
+tr12:
+#line 76 "rlscan.rl"
+ { escapeXML( (*p) ); }
+#line 77 "rlscan.rl"
+ { {cs = stack[--top];goto _again;} }
+ goto st30;
+st30:
+ if ( ++p == pe )
+ goto _test_eof30;
+case 30:
+#line 411 "rlscan.cpp"
+ goto st0;
+tr13:
+#line 112 "rlscan.rl"
+ {{p = ((te))-1;}{ escapeXML( *ts ); }}
+ goto st31;
+tr15:
+#line 79 "rlscan.rl"
+ {te = p+1;{
+ escapeXML( ts, te-ts );
+ }}
+ goto st31;
+tr18:
+#line 79 "rlscan.rl"
+ {te = p+1;{
+ escapeXML( ts, te-ts );
+ }}
+ goto st31;
+tr21:
+#line 79 "rlscan.rl"
+ {te = p+1;{
+ escapeXML( ts, te-ts );
+ }}
+ goto st31;
+tr51:
+#line 112 "rlscan.rl"
+ {te = p+1;{ escapeXML( *ts ); }}
+ goto st31;
+tr55:
+#line 97 "rlscan.rl"
+ {te = p+1;{
+ write( '{' );
+ inline_depth += 1;
+ }}
+ goto st31;
+tr56:
+#line 102 "rlscan.rl"
+ {te = p+1;{
+ write( '}' );
+ /* If dropping down to the last } then return
+ * to ragel code. */
+ if ( --inline_depth == 0 ) {
+ write( "</inline>\n" );
+ {goto st35;}
+ }
+ }}
+ goto st31;
+tr57:
+#line 112 "rlscan.rl"
+ {te = p;p--;{ escapeXML( *ts ); }}
+ goto st31;
+tr58:
+#line 91 "rlscan.rl"
+ {te = p+1;{
+ write( "/*" );
+ {stack[top++] = 31; goto st6;}
+ }}
+ goto st31;
+st31:
+#line 1 "NONE"
+ {ts = 0;}
+ if ( ++p == pe )
+ goto _test_eof31;
+case 31:
+#line 1 "NONE"
+ {ts = p;}
+#line 477 "rlscan.cpp"
+ switch( (*p) ) {
+ case 0: goto st0;
+ case 34: goto tr52;
+ case 39: goto tr53;
+ case 47: goto tr54;
+ case 123: goto tr55;
+ case 125: goto tr56;
+ }
+ goto tr51;
+tr52:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st32;
+st32:
+ if ( ++p == pe )
+ goto _test_eof32;
+case 32:
+#line 495 "rlscan.cpp"
+ switch( (*p) ) {
+ case 34: goto tr15;
+ case 92: goto st9;
+ }
+ goto st8;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+ switch( (*p) ) {
+ case 34: goto tr15;
+ case 92: goto st9;
+ }
+ goto st8;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+ goto st8;
+tr53:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st33;
+st33:
+ if ( ++p == pe )
+ goto _test_eof33;
+case 33:
+#line 523 "rlscan.cpp"
+ switch( (*p) ) {
+ case 39: goto tr18;
+ case 92: goto st11;
+ }
+ goto st10;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+ switch( (*p) ) {
+ case 39: goto tr18;
+ case 92: goto st11;
+ }
+ goto st10;
+st11:
+ if ( ++p == pe )
+ goto _test_eof11;
+case 11:
+ goto st10;
+tr54:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st34;
+st34:
+ if ( ++p == pe )
+ goto _test_eof34;
+case 34:
+#line 551 "rlscan.cpp"
+ switch( (*p) ) {
+ case 42: goto tr58;
+ case 47: goto st12;
+ }
+ goto tr57;
+st12:
+ if ( ++p == pe )
+ goto _test_eof12;
+case 12:
+ if ( (*p) == 10 )
+ goto tr21;
+ goto st12;
+tr22:
+#line 193 "rlscan.rl"
+ {{p = ((te))-1;}{
+ write( "<symbol>" );
+ escapeXML( (*p) );
+ write( "</symbol>\n" );
+ }}
+ goto st35;
+tr24:
+#line 166 "rlscan.rl"
+ {te = p+1;{
+ write( "<double_lit>" );
+ escapeXML( ts, te-ts );
+ write( "</double_lit>\n" );
+ }}
+ goto st35;
+tr27:
+#line 156 "rlscan.rl"
+ {te = p+1;}
+ goto st35;
+tr29:
+#line 159 "rlscan.rl"
+ {te = p+1;{
+ write( "<single_lit>" );
+ escapeXML( ts, te-ts );
+ write( "</single_lit>\n" );
+ }}
+ goto st35;
+tr32:
+#line 180 "rlscan.rl"
+ {te = p+1;{
+ write( "<re_lit>" );
+ escapeXML( ts, te-ts );
+ write( "</re_lit>\n" );
+ }}
+ goto st35;
+tr34:
+#line 142 "rlscan.rl"
+ {{p = ((te))-1;}{
+ write( "<int>" );
+ write( ts, te-ts );
+ write( "</int>\n" );
+ }}
+ goto st35;
+tr38:
+#line 173 "rlscan.rl"
+ {te = p+1;{
+ write( "<or_lit>" );
+ escapeXML( ts, te-ts );
+ write( "</or_lit>\n" );
+ }}
+ goto st35;
+tr39:
+#line 120 "rlscan.rl"
+ {te = p+1;{
+ if ( !single_line ) {
+ write( "</section>\n" );
+ {goto st24;}
+ }
+ }}
+ goto st35;
+tr59:
+#line 199 "rlscan.rl"
+ {te = p+1;}
+ goto st35;
+tr60:
+#line 127 "rlscan.rl"
+ {te = p+1;{
+ if ( single_line ) {
+ write( "</section>\n" );
+ {goto st24;}
+ }
+ }}
+ goto st35;
+tr61:
+#line 193 "rlscan.rl"
+ {te = p+1;{
+ write( "<symbol>" );
+ escapeXML( (*p) );
+ write( "</symbol>\n" );
+ }}
+ goto st35;
+tr70:
+#line 187 "rlscan.rl"
+ {te = p+1;{
+ inline_depth = 1;
+ write( "<inline>{" );
+ {goto st31;}
+ }}
+ goto st35;
+tr72:
+#line 193 "rlscan.rl"
+ {te = p;p--;{
+ write( "<symbol>" );
+ escapeXML( (*p) );
+ write( "</symbol>\n" );
+ }}
+ goto st35;
+tr73:
+#line 142 "rlscan.rl"
+ {te = p;p--;{
+ write( "<int>" );
+ write( ts, te-ts );
+ write( "</int>\n" );
+ }}
+ goto st35;
+tr75:
+#line 149 "rlscan.rl"
+ {te = p;p--;{
+ write( "<hex>" );
+ write( ts, te-ts );
+ write( "</hex>\n" );
+ }}
+ goto st35;
+tr76:
+#line 135 "rlscan.rl"
+ {te = p;p--;{
+ write( "<word>" );
+ write( ts, te-ts );
+ write( "</word>\n" );
+ }}
+ goto st35;
+st35:
+#line 1 "NONE"
+ {ts = 0;}
+ if ( ++p == pe )
+ goto _test_eof35;
+case 35:
+#line 1 "NONE"
+ {ts = p;}
+#line 694 "rlscan.cpp"
+ switch( (*p) ) {
+ case 0: goto st0;
+ case 10: goto tr60;
+ case 34: goto tr62;
+ case 35: goto tr63;
+ case 39: goto tr64;
+ case 47: goto tr65;
+ case 48: goto tr66;
+ case 91: goto tr69;
+ case 95: goto st43;
+ case 123: goto tr70;
+ case 125: goto tr71;
+ }
+ if ( (*p) < 65 ) {
+ if ( (*p) < 49 ) {
+ if ( 33 <= (*p) && (*p) <= 46 )
+ goto tr61;
+ } else if ( (*p) > 57 ) {
+ if ( 58 <= (*p) && (*p) <= 64 )
+ goto tr61;
+ } else
+ goto st41;
+ } else if ( (*p) > 90 ) {
+ if ( (*p) < 97 ) {
+ if ( 92 <= (*p) && (*p) <= 96 )
+ goto tr61;
+ } else if ( (*p) > 122 ) {
+ if ( 124 <= (*p) && (*p) <= 126 )
+ goto tr61;
+ } else
+ goto st43;
+ } else
+ goto st43;
+ goto tr59;
+tr62:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st36;
+st36:
+ if ( ++p == pe )
+ goto _test_eof36;
+case 36:
+#line 737 "rlscan.cpp"
+ switch( (*p) ) {
+ case 34: goto tr24;
+ case 92: goto st14;
+ }
+ goto st13;
+st13:
+ if ( ++p == pe )
+ goto _test_eof13;
+case 13:
+ switch( (*p) ) {
+ case 34: goto tr24;
+ case 92: goto st14;
+ }
+ goto st13;
+st14:
+ if ( ++p == pe )
+ goto _test_eof14;
+case 14:
+ goto st13;
+tr63:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st37;
+st37:
+ if ( ++p == pe )
+ goto _test_eof37;
+case 37:
+#line 765 "rlscan.cpp"
+ if ( (*p) == 10 )
+ goto tr27;
+ goto st15;
+st15:
+ if ( ++p == pe )
+ goto _test_eof15;
+case 15:
+ if ( (*p) == 10 )
+ goto tr27;
+ goto st15;
+tr64:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st38;
+st38:
+ if ( ++p == pe )
+ goto _test_eof38;
+case 38:
+#line 784 "rlscan.cpp"
+ switch( (*p) ) {
+ case 39: goto tr29;
+ case 92: goto st17;
+ }
+ goto st16;
+st16:
+ if ( ++p == pe )
+ goto _test_eof16;
+case 16:
+ switch( (*p) ) {
+ case 39: goto tr29;
+ case 92: goto st17;
+ }
+ goto st16;
+st17:
+ if ( ++p == pe )
+ goto _test_eof17;
+case 17:
+ goto st16;
+tr65:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st39;
+st39:
+ if ( ++p == pe )
+ goto _test_eof39;
+case 39:
+#line 812 "rlscan.cpp"
+ switch( (*p) ) {
+ case 47: goto tr32;
+ case 92: goto st19;
+ }
+ goto st18;
+st18:
+ if ( ++p == pe )
+ goto _test_eof18;
+case 18:
+ switch( (*p) ) {
+ case 47: goto tr32;
+ case 92: goto st19;
+ }
+ goto st18;
+st19:
+ if ( ++p == pe )
+ goto _test_eof19;
+case 19:
+ goto st18;
+tr66:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st40;
+st40:
+ if ( ++p == pe )
+ goto _test_eof40;
+case 40:
+#line 840 "rlscan.cpp"
+ if ( (*p) == 120 )
+ goto st20;
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st41;
+ goto tr73;
+st41:
+ if ( ++p == pe )
+ goto _test_eof41;
+case 41:
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st41;
+ goto tr73;
+st20:
+ if ( ++p == pe )
+ goto _test_eof20;
+case 20:
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st42;
+ } else if ( (*p) > 70 ) {
+ if ( 97 <= (*p) && (*p) <= 102 )
+ goto st42;
+ } else
+ goto st42;
+ goto tr34;
+st42:
+ if ( ++p == pe )
+ goto _test_eof42;
+case 42:
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st42;
+ } else if ( (*p) > 70 ) {
+ if ( 97 <= (*p) && (*p) <= 102 )
+ goto st42;
+ } else
+ goto st42;
+ goto tr75;
+st43:
+ if ( ++p == pe )
+ goto _test_eof43;
+case 43:
+ if ( (*p) == 95 )
+ goto st43;
+ if ( (*p) < 65 ) {
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto st43;
+ } else if ( (*p) > 90 ) {
+ if ( 97 <= (*p) && (*p) <= 122 )
+ goto st43;
+ } else
+ goto st43;
+ goto tr76;
+tr69:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st44;
+st44:
+ if ( ++p == pe )
+ goto _test_eof44;
+case 44:
+#line 902 "rlscan.cpp"
+ switch( (*p) ) {
+ case 92: goto st22;
+ case 93: goto tr38;
+ }
+ goto st21;
+st21:
+ if ( ++p == pe )
+ goto _test_eof21;
+case 21:
+ switch( (*p) ) {
+ case 92: goto st22;
+ case 93: goto tr38;
+ }
+ goto st21;
+st22:
+ if ( ++p == pe )
+ goto _test_eof22;
+case 22:
+ goto st21;
+tr71:
+#line 1 "NONE"
+ {te = p+1;}
+ goto st45;
+st45:
+ if ( ++p == pe )
+ goto _test_eof45;
+case 45:
+#line 930 "rlscan.cpp"
+ if ( (*p) == 37 )
+ goto st23;
+ goto tr72;
+st23:
+ if ( ++p == pe )
+ goto _test_eof23;
+case 23:
+ if ( (*p) == 37 )
+ goto tr39;
+ goto tr22;
+ }
+ _test_eof24: cs = 24; goto _test_eof;
+ _test_eof25: cs = 25; goto _test_eof;
+ _test_eof1: cs = 1; goto _test_eof;
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof26: cs = 26; goto _test_eof;
+ _test_eof27: cs = 27; goto _test_eof;
+ _test_eof28: cs = 28; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof29: cs = 29; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof30: cs = 30; goto _test_eof;
+ _test_eof31: cs = 31; goto _test_eof;
+ _test_eof32: cs = 32; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+ _test_eof33: cs = 33; goto _test_eof;
+ _test_eof10: cs = 10; goto _test_eof;
+ _test_eof11: cs = 11; goto _test_eof;
+ _test_eof34: cs = 34; goto _test_eof;
+ _test_eof12: cs = 12; goto _test_eof;
+ _test_eof35: cs = 35; goto _test_eof;
+ _test_eof36: cs = 36; goto _test_eof;
+ _test_eof13: cs = 13; goto _test_eof;
+ _test_eof14: cs = 14; goto _test_eof;
+ _test_eof37: cs = 37; goto _test_eof;
+ _test_eof15: cs = 15; goto _test_eof;
+ _test_eof38: cs = 38; goto _test_eof;
+ _test_eof16: cs = 16; goto _test_eof;
+ _test_eof17: cs = 17; goto _test_eof;
+ _test_eof39: cs = 39; goto _test_eof;
+ _test_eof18: cs = 18; goto _test_eof;
+ _test_eof19: cs = 19; goto _test_eof;
+ _test_eof40: cs = 40; goto _test_eof;
+ _test_eof41: cs = 41; goto _test_eof;
+ _test_eof20: cs = 20; goto _test_eof;
+ _test_eof42: cs = 42; goto _test_eof;
+ _test_eof43: cs = 43; goto _test_eof;
+ _test_eof44: cs = 44; goto _test_eof;
+ _test_eof21: cs = 21; goto _test_eof;
+ _test_eof22: cs = 22; goto _test_eof;
+ _test_eof45: cs = 45; goto _test_eof;
+ _test_eof23: cs = 23; goto _test_eof;
+
+ _test_eof: {}
+ if ( p == eof )
+ {
+ switch ( cs ) {
+ case 25: goto tr46;
+ case 1: goto tr0;
+ case 2: goto tr0;
+ case 26: goto tr46;
+ case 27: goto tr48;
+ case 28: goto tr46;
+ case 3: goto tr0;
+ case 4: goto tr0;
+ case 29: goto tr46;
+ case 5: goto tr0;
+ case 32: goto tr57;
+ case 8: goto tr13;
+ case 9: goto tr13;
+ case 33: goto tr57;
+ case 10: goto tr13;
+ case 11: goto tr13;
+ case 34: goto tr57;
+ case 12: goto tr13;
+ case 36: goto tr72;
+ case 13: goto tr22;
+ case 14: goto tr22;
+ case 37: goto tr72;
+ case 15: goto tr22;
+ case 38: goto tr72;
+ case 16: goto tr22;
+ case 17: goto tr22;
+ case 39: goto tr72;
+ case 18: goto tr22;
+ case 19: goto tr22;
+ case 40: goto tr73;
+ case 41: goto tr73;
+ case 20: goto tr34;
+ case 42: goto tr75;
+ case 43: goto tr76;
+ case 44: goto tr72;
+ case 21: goto tr22;
+ case 22: goto tr22;
+ case 45: goto tr72;
+ case 23: goto tr22;
+ }
+ }
+
+ _out: {}
+ }
+
+#line 282 "rlscan.rl"
+
+ if ( cs == RagelScan_error ) {
+ /* Machine failed before finding a token. */
+ cerr << "PARSE ERROR" << endl;
+ exit(1);
+ }
+
+ if ( ts == 0 )
+ have = 0;
+ else {
+ /* There is a prefix to preserve, shift it over. */
+ have = pe - ts;
+ memmove( inbuf, ts, have );
+ te = inbuf + (te-ts);
+ ts = inbuf;
+ }
+ }
+ return 0;
+}
diff --git a/examples/statechart.cpp b/examples/statechart.cpp
new file mode 100644
index 0000000..afe3b9c
--- /dev/null
+++ b/examples/statechart.cpp
@@ -0,0 +1,187 @@
+
+#line 1 "statechart.rl"
+/*
+ * Demonstrate the use of labels, the epsilon operator, and the join operator
+ * for creating machines using the named state and transition list paradigm.
+ * This implementes the same machine as the atoi example.
+ */
+
+#include <iostream>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+using namespace std;
+
+struct StateChart
+{
+ bool neg;
+ int val;
+ int cs;
+
+ int init( );
+ int execute( const char *data, int len );
+ int finish( );
+};
+
+
+#line 66 "statechart.rl"
+
+
+
+#line 33 "statechart.cpp"
+static const int StateChart_start = 3;
+static const int StateChart_first_final = 3;
+static const int StateChart_error = 0;
+
+static const int StateChart_en_main = 3;
+
+
+#line 69 "statechart.rl"
+
+int StateChart::init( )
+{
+ neg = false;
+ val = false;
+
+#line 48 "statechart.cpp"
+ {
+ cs = StateChart_start;
+ }
+
+#line 75 "statechart.rl"
+ return 1;
+}
+
+int StateChart::execute( const char *data, int len )
+{
+ const char *p = data;
+ const char *pe = data + len;
+
+
+#line 63 "statechart.cpp"
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+tr2:
+#line 41 "statechart.rl"
+ {
+ if ( neg )
+ val = -1 * val;
+ }
+#line 65 "statechart.rl"
+ { cout << val << endl; }
+ goto st3;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+#line 82 "statechart.cpp"
+ switch( (*p) ) {
+ case 43: goto tr3;
+ case 45: goto tr4;
+ }
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr5;
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+tr3:
+#line 28 "statechart.rl"
+ {
+ neg = false;
+ val = 0;
+ }
+ goto st1;
+tr4:
+#line 28 "statechart.rl"
+ {
+ neg = false;
+ val = 0;
+ }
+#line 33 "statechart.rl"
+ {
+ neg = true;
+ }
+ goto st1;
+st1:
+ if ( ++p == pe )
+ goto _test_eof1;
+case 1:
+#line 115 "statechart.cpp"
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr0;
+ goto st0;
+tr0:
+#line 37 "statechart.rl"
+ {
+ val = val * 10 + ((*p) - '0');
+ }
+ goto st2;
+tr5:
+#line 28 "statechart.rl"
+ {
+ neg = false;
+ val = 0;
+ }
+#line 37 "statechart.rl"
+ {
+ val = val * 10 + ((*p) - '0');
+ }
+ goto st2;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+#line 140 "statechart.cpp"
+ if ( (*p) == 10 )
+ goto tr2;
+ if ( 48 <= (*p) && (*p) <= 57 )
+ goto tr0;
+ goto st0;
+ }
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof1: cs = 1; goto _test_eof;
+ _test_eof2: cs = 2; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 84 "statechart.rl"
+
+ if ( cs == StateChart_error )
+ return -1;
+ if ( cs >= StateChart_first_final )
+ return 1;
+ return 0;
+}
+
+int StateChart::finish( )
+{
+ if ( cs == StateChart_error )
+ return -1;
+ if ( cs >= StateChart_first_final )
+ return 1;
+ return 0;
+}
+
+
+#define BUFSIZE 1024
+
+int main()
+{
+ char buf[BUFSIZE];
+
+ StateChart atoi;
+ atoi.init();
+ while ( fgets( buf, sizeof(buf), stdin ) != 0 ) {
+ atoi.execute( buf, strlen(buf) );
+ }
+ if ( atoi.finish() <= 0 )
+ cerr << "statechart: error: parsing input" << endl;
+ return 0;
+}
diff --git a/examples/uri.rl b/examples/uri.rl
deleted file mode 100644
index 185a76c..0000000
--- a/examples/uri.rl
+++ /dev/null
@@ -1,31 +0,0 @@
-%%{
- machine uri;
-
- action scheme {}
- action loc {}
- action item {}
- action query {}
- action last {}
- action nothing {}
-
- main :=
- # Scheme machine. This is ambiguous with the item machine. We commit
- # to the scheme machine on colon.
- ( [^:/?#]+ ':' @(colon,1) @scheme )?
-
- # Location machine. This is ambiguous with the item machine. We remain
- # ambiguous until a second slash, at that point and all points after
- # we place a higher priority on staying in the location machine over
- # moving into the item machine.
- ( ( '/' ( '/' [^/?#]* ) $(loc,1) ) %loc %/loc )?
-
- # Item machine. Ambiguous with both scheme and location, which both
- # get a higher priority on the characters causing ambiguity.
- ( ( [^?#]+ ) $(loc,0) $(colon,0) %item %/item )?
-
- # Last two components, the characters that initiate these machines are
- # not supported in any previous components, therefore there are no
- # ambiguities introduced by these parts.
- ( '?' [^#]* %query %/query)?
- ( '#' any* %/last )?;
-}%%
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..a9244eb
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,527 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2011-01-19.21; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" "" $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+ doit_exec=exec
+else
+ doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+ test "$posix_glob" != "?" || {
+ if (set -f) 2>/dev/null; then
+ posix_glob=
+ else
+ posix_glob=:
+ fi
+ }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve the last data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -s $stripprog installed files.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -s) stripcmd=$stripprog;;
+
+ -t) dst_arg=$2
+ # Protect names problematic for `test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ shift;;
+
+ -T) no_target_directory=true;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ # Protect names problematic for `test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call `install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ do_exit='(exit $ret); exit $ret'
+ trap "ret=129; $do_exit" 1
+ trap "ret=130; $do_exit" 2
+ trap "ret=141; $do_exit" 13
+ trap "ret=143; $do_exit" 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names problematic for `test' and other utilities.
+ case $src in
+ -* | [=\(\)!]) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+ dst=$dst_arg
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writeable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ [-=\(\)!]*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ eval "$initialize_posix_glob"
+
+ oIFS=$IFS
+ IFS=/
+ $posix_glob set -f
+ set fnord $dstdir
+ shift
+ $posix_glob set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test X"$d" = X && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+ eval "$initialize_posix_glob" &&
+ $posix_glob set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ $posix_glob set +f &&
+
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/missing b/missing
new file mode 100755
index 0000000..86a8fc3
--- /dev/null
+++ b/missing
@@ -0,0 +1,331 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2012-01-06.13; # UTC
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
+# 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, 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 to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+ configure_ac=configure.ac
+else
+ configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+ # Try to run requested program, and just exit if it succeeds.
+ run=
+ shift
+ "$@" && exit 0
+ # Exit code 63 means version mismatch. This often happens
+ # when the user try to use an ancient version of a tool on
+ # a file that requires a minimum version. In this case we
+ # we should proceed has if the program had been absent, or
+ # if --run hadn't been passed.
+ if test $? = 63; then
+ run=:
+ msg="probably too old"
+ fi
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+ --run try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`config.h.in'
+ autom4te touch the output file, or create a stub one
+ automake touch all \`Makefile.in' files
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
+ flex create \`lex.yy.c', if possible, from existing .c
+ help2man touch the output file
+ lex create \`lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
+\`g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: Unknown \`$1' option"
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# normalize program name to check for.
+program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+# Now exit if we have it, but it failed. Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program). This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+ lex*|yacc*)
+ # Not GNU programs, they don't have --version.
+ ;;
+
+ *)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+ # Could not run --version or --help. This is probably someone
+ # running `$TOOL --version' or `$TOOL --help' to check whether
+ # $TOOL exists and not knowing $TOOL uses missing.
+ exit 1
+ fi
+ ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $program in
+ aclocal*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`acinclude.m4' or \`${configure_ac}'. You might want
+ to install the \`Automake' and \`Perl' packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`${configure_ac}'. You might want to install the
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`acconfig.h' or \`${configure_ac}'. You might want
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+ test -z "$files" && files="config.h"
+ touch_files=
+ for f in $files; do
+ case $f in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+ esac
+ done
+ touch $touch_files
+ ;;
+
+ automake*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+ You might want to install the \`Automake' and \`Perl' packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print |
+ sed 's/\.am$/.in/' |
+ while read f; do touch "$f"; done
+ ;;
+
+ autom4te*)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them.
+ You can get \`$1' as part of \`Autoconf' from any GNU
+ archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo "#! /bin/sh"
+ echo "# Created by GNU Automake missing as a replacement of"
+ echo "# $ $@"
+ echo "exit 0"
+ chmod +x $file
+ exit 1
+ fi
+ ;;
+
+ bison*|yacc*)
+ echo 1>&2 "\
+WARNING: \`$1' $msg. You should only need it if
+ you modified a \`.y' file. You may need the \`Bison' package
+ in order for those modifications to take effect. You can get
+ \`Bison' from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if test $# -ne 1; then
+ eval LASTARG=\${$#}
+ case $LASTARG in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f y.tab.h; then
+ echo >y.tab.h
+ fi
+ if test ! -f y.tab.c; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex*|flex*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.l' file. You may need the \`Flex' package
+ in order for those modifications to take effect. You can get
+ \`Flex' from any GNU archive site."
+ rm -f lex.yy.c
+ if test $# -ne 1; then
+ eval LASTARG=\${$#}
+ case $LASTARG in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f lex.yy.c; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ help2man*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a dependency of a manual page. You may need the
+ \`Help2man' package in order for those modifications to take
+ effect. You can get \`Help2man' from any GNU archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo ".ab help2man is required to generate this page"
+ exit $?
+ fi
+ ;;
+
+ makeinfo*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.texi' or \`.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy \`make' (AIX,
+ DU, IRIX). You might want to install the \`Texinfo' package or
+ the \`GNU make' package. Grab either from any GNU archive site."
+ # The file to touch is that specified with -o ...
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -z "$file"; then
+ # ... or it is the one specified with @setfilename ...
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '
+ /^@setfilename/{
+ s/.* \([^ ]*\) *$/\1/
+ p
+ q
+ }' $infile`
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+ fi
+ # If the file does not exist, the user really needs makeinfo;
+ # let's fail without touching anything.
+ test -f $file || exit 1
+ touch $file
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them. Check the \`README' file,
+ it often tells you about the needed prerequisites for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing \`$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/packaging/ragel.changes b/packaging/ragel.changes
deleted file mode 100644
index 5d1114c..0000000
--- a/packaging/ragel.changes
+++ /dev/null
@@ -1,6 +0,0 @@
-* Sun Aug 25 2013 Chengwei Yang <chengwei.yang@intel.com>
-- Remove debian packaging stuff
-
-* Fri May 31 2013 Anas Nashif <anas.nashif@intel.com> submit/tizen/20130517.052030@efe4fba
-- Remove placeholders and cleanup spec
-
diff --git a/packaging/ragel.spec b/packaging/ragel.spec
index 5a2a56f..4603739 100644
--- a/packaging/ragel.spec
+++ b/packaging/ragel.spec
@@ -1,6 +1,12 @@
+%define run_tests 0
+%if %{run_tests}
+ # check is defined off at .rpmmacros file.
+ %undefine check
+%endif
+
Name: ragel
Summary: Ragel State Machine Compiler
-Version: 6.6
+Version: 6.8
Release: 1
Group: System/Utilities
License: GPL-2.0
@@ -30,6 +36,13 @@ cp %{SOURCE1001} .
make %{?jobs:-j%jobs}
+%check
+%if %{run_tests}
+ pushd test
+ %__make check || exit 0
+ popd
+ ./run_test.sh %{name} %{version}
+%endif
%install
rm -rf %{buildroot}
diff --git a/ragel-d.vim b/ragel-d.vim
deleted file mode 100644
index ac7c51d..0000000
--- a/ragel-d.vim
+++ /dev/null
@@ -1,156 +0,0 @@
-" Vim syntax file
-"
-" Language: Ragel
-" Author: Adrian Thurston
-
-syntax clear
-
-"
-" Outside code
-"
-
-" Comments
-syntax region ocComment start="\/\*" end="\*\/"
-syntax match ocComment "\/\/.*$"
-
-" Anything preprocessor
-syntax match ocPreproc "#.*$"
-
-" Strings
-syntax match ocLiteral "'\(\\.\|[^'\\]\)*'"
-syntax match ocLiteral "\"\(\\.\|[^\"\\]\)*\""
-
-" C/C++ Keywords
-syntax keyword ocType unsigned signed void char short int long float double bool
-syntax keyword ocType inline static extern register const volatile auto
-syntax keyword ocType union enum struct class typedef
-syntax keyword ocType namespace template typename mutable
-syntax keyword ocKeyword break continue default do else for
-syntax keyword ocKeyword goto if return switch while
-syntax keyword ocKeyword new delete this using friend public private protected sizeof
-syntax keyword ocKeyword throw try catch operator typeid
-syntax keyword ocKeyword and bitor xor compl bitand and_eq or_eq xor_eq not not_eq
-syntax keyword ocKeyword static_cast dynamic_cast
-
-" D Keywords
-syntax keyword ocType wchar dchar bit byte ubyte ushort uint ulong cent ucent
-syntax keyword ocType cfloat ifloat cdouble idouble real creal ireal
-syntax keyword ocKeyword abstract alias align asm assert body cast debug delegate
-syntax keyword ocKeyword deprecated export final finally foreach function import in inout
-syntax keyword ocKeyword interface invariant is mixin module out override package pragma
-syntax keyword ocKeyword super synchronized typeof unittest version with
-
-" Numbers
-syntax match ocNumber "[0-9][0-9]*"
-syntax match ocNumber "0x[0-9a-fA-F][0-9a-fA-F]*"
-
-" Booleans
-syntax keyword ocBoolean true false
-
-" Identifiers
-syntax match anyId "[a-zA-Z_][a-zA-Z_0-9]*"
-
-" Inline code only
-syntax keyword fsmType fpc fc fcurs fbuf fblen ftargs fstack
-syntax keyword fsmKeyword fhold fgoto fcall fret fentry fnext fexec fbreak
-
-syntax cluster rlItems contains=rlComment,rlLiteral,rlAugmentOps,rlOtherOps,rlKeywords,rlWrite,rlCodeCurly,rlCodeSemi,rlNumber,anyId,rlLabelColon,rlExprKeywords
-
-syntax region machineSpec1 matchgroup=beginRL start="%%{" end="}%%" contains=@rlItems
-syntax region machineSpec2 matchgroup=beginRL start="%%[^{]"rs=e-1 end="$" keepend contains=@rlItems
-syntax region machineSpec2 matchgroup=beginRL start="%%$" end="$" keepend contains=@rlItems
-
-" Comments
-syntax match rlComment "#.*$" contained
-
-" Literals
-syntax match rlLiteral "'\(\\.\|[^'\\]\)*'[i]*" contained
-syntax match rlLiteral "\"\(\\.\|[^\"\\]\)*\"[i]*" contained
-syntax match rlLiteral /\/\(\\.\|[^\/\\]\)*\/[i]*/ contained
-syntax match rlLiteral "\[\(\\.\|[^\]\\]\)*\]" contained
-
-" Numbers
-syntax match rlNumber "[0-9][0-9]*" contained
-syntax match rlNumber "0x[0-9a-fA-F][0-9a-fA-F]*" contained
-
-" Operators
-syntax match rlAugmentOps "[>$%@]" contained
-syntax match rlAugmentOps "<>\|<" contained
-syntax match rlAugmentOps "[>\<$%@][!\^/*~]" contained
-syntax match rlAugmentOps "[>$%]?" contained
-syntax match rlAugmentOps "<>[!\^/*~]" contained
-syntax match rlAugmentOps "=>" contained
-syntax match rlOtherOps "->" contained
-
-syntax match rlOtherOps ":>" contained
-syntax match rlOtherOps ":>>" contained
-syntax match rlOtherOps "<:" contained
-
-" Keywords
-" FIXME: Enable the range keyword post 5.17.
-" syntax keyword rlKeywords machine action context include range contained
-syntax keyword rlKeywords machine action context include import export prepush postpop contained
-syntax keyword rlExprKeywords when inwhen outwhen err lerr eof from to contained
-
-" Case Labels
-syntax keyword caseLabelKeyword case contained
-syntax cluster caseLabelItems contains=ocComment,ocPreproc,ocLiteral,ocType,ocKeyword,caseLabelKeyword,ocNumber,ocBoolean,anyId,fsmType,fsmKeyword
-syntax match caseLabelColon "case" contains=@caseLabelItems
-syntax match caseLabelColon "case[\t ]\+.*:$" contains=@caseLabelItems
-syntax match caseLabelColon "case[\t ]\+.*:[^=:]"me=e-1 contains=@caseLabelItems
-
-" Labels
-syntax match ocLabelColon "^[\t ]*[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:$" contains=anyLabel
-syntax match ocLabelColon "^[\t ]*[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:[^=:]"me=e-1 contains=anyLabel
-
-syntax match rlLabelColon "[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:$" contained contains=anyLabel
-syntax match rlLabelColon "[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:[^=:>]"me=e-1 contained contains=anyLabel
-syntax match anyLabel "[a-zA-Z_][a-zA-Z_0-9]*" contained
-
-" All items that can go in a code block.
-
-syntax cluster inlineItems contains=rlCodeCurly,ocComment,ocPreproc,ocLiteral,ocType,ocKeyword,ocNumber,ocBoolean,ocLabelColon,anyId,fsmType,fsmKeyword,caseLabelColon
-
-" Blocks of code. rlCodeCurly is recursive.
-syntax region rlCodeCurly matchgroup=NONE start="{" end="}" contained contains=@inlineItems
-syntax region rlCodeSemi matchgroup=Type start="\<alphtype\>" start="\<getkey\>" start="\<access\>" start="\<variable\>" matchgroup=NONE end=";" contained contains=@inlineItems
-
-syntax region rlWrite matchgroup=Type start="\<write\>" matchgroup=NONE end="[;)]" contained contains=rlWriteKeywords,rlWriteOptions
-
-syntax keyword rlWriteKeywords init data exec exports start error first_final contained
-syntax keyword rlWriteOptions noerror nofinal noprefix noend nocs contained
-
-"
-" Sync at the start of machine specs.
-"
-" Match The ragel delimiters only if there quotes no ahead on the same line.
-" On the open marker, use & to consume the leader.
-syntax sync match ragelSyncPat grouphere NONE "^[^\'\"%]*%%{&^[^\'\"%]*"
-syntax sync match ragelSyncPat grouphere NONE "^[^\'\"%]*%%[^{]&^[^\'\"%]*"
-syntax sync match ragelSyncPat grouphere NONE "^[^\'\"]*}%%"
-
-"
-" Specifying Groups
-"
-hi link ocComment Comment
-hi link ocPreproc Macro
-hi link ocLiteral String
-hi link ocType Type
-hi link ocKeyword Keyword
-hi link ocNumber Number
-hi link ocBoolean Boolean
-hi link rlComment Comment
-hi link rlNumber Number
-hi link rlLiteral String
-hi link rlAugmentOps Keyword
-hi link rlExprKeywords Keyword
-hi link rlWriteKeywords Keyword
-hi link rlWriteOptions Keyword
-hi link rlKeywords Type
-hi link fsmType Type
-hi link fsmKeyword Keyword
-hi link anyLabel Label
-hi link caseLabelKeyword Keyword
-hi link beginRL Type
-
-let b:current_syntax = "ragel"
diff --git a/ragel-java.vim b/ragel-java.vim
deleted file mode 100644
index 227481e..0000000
--- a/ragel-java.vim
+++ /dev/null
@@ -1,151 +0,0 @@
-" Vim syntax file
-"
-" Language: Ragel
-" Author: Adrian Thurston
-
-syntax clear
-
-"
-" Outside code
-"
-
-" Comments
-syntax region ocComment start="\/\*" end="\*\/"
-syntax match ocComment "\/\/.*$"
-
-" Anything preprocessor
-syntax match ocPreproc "#.*$"
-
-" Strings
-syntax match ocLiteral "'\(\\.\|[^'\\]\)*'"
-syntax match ocLiteral "\"\(\\.\|[^\"\\]\)*\""
-
-" C/C++ Keywords
-syntax keyword ocType unsigned signed void char short int long float double bool
-syntax keyword ocType inline static extern register const volatile auto
-syntax keyword ocType union enum struct class typedef
-syntax keyword ocType namespace template typename mutable
-syntax keyword ocKeyword break continue default do else for
-syntax keyword ocKeyword goto if return switch while
-syntax keyword ocKeyword new delete this using friend public private protected sizeof
-syntax keyword ocKeyword throw try catch operator typeid
-syntax keyword ocKeyword and bitor xor compl bitand and_eq or_eq xor_eq not not_eq
-syntax keyword ocKeyword static_cast dynamic_cast
-
-" Java Keywords
-syntax keyword ocType byte short char int
-
-" Numbers
-syntax match ocNumber "[0-9][0-9]*"
-syntax match ocNumber "0x[0-9a-fA-F][0-9a-fA-F]*"
-
-" Booleans
-syntax keyword ocBoolean true false
-
-" Identifiers
-syntax match anyId "[a-zA-Z_][a-zA-Z_0-9]*"
-
-" Inline code only
-syntax keyword fsmType fpc fc fcurs fbuf fblen ftargs fstack
-syntax keyword fsmKeyword fhold fgoto fcall fret fentry fnext fexec fbreak
-
-syntax cluster rlItems contains=rlComment,rlLiteral,rlAugmentOps,rlOtherOps,rlKeywords,rlWrite,rlCodeCurly,rlCodeSemi,rlNumber,anyId,rlLabelColon,rlExprKeywords
-
-syntax region machineSpec1 matchgroup=beginRL start="%%{" end="}%%" contains=@rlItems
-syntax region machineSpec2 matchgroup=beginRL start="%%[^{]"rs=e-1 end="$" keepend contains=@rlItems
-syntax region machineSpec2 matchgroup=beginRL start="%%$" end="$" keepend contains=@rlItems
-
-" Comments
-syntax match rlComment "#.*$" contained
-
-" Literals
-syntax match rlLiteral "'\(\\.\|[^'\\]\)*'[i]*" contained
-syntax match rlLiteral "\"\(\\.\|[^\"\\]\)*\"[i]*" contained
-syntax match rlLiteral /\/\(\\.\|[^\/\\]\)*\/[i]*/ contained
-syntax match rlLiteral "\[\(\\.\|[^\]\\]\)*\]" contained
-
-" Numbers
-syntax match rlNumber "[0-9][0-9]*" contained
-syntax match rlNumber "0x[0-9a-fA-F][0-9a-fA-F]*" contained
-
-" Operators
-syntax match rlAugmentOps "[>$%@]" contained
-syntax match rlAugmentOps "<>\|<" contained
-syntax match rlAugmentOps "[>\<$%@][!\^/*~]" contained
-syntax match rlAugmentOps "[>$%]?" contained
-syntax match rlAugmentOps "<>[!\^/*~]" contained
-syntax match rlAugmentOps "=>" contained
-syntax match rlOtherOps "->" contained
-
-syntax match rlOtherOps ":>" contained
-syntax match rlOtherOps ":>>" contained
-syntax match rlOtherOps "<:" contained
-
-" Keywords
-" FIXME: Enable the range keyword post 5.17.
-" syntax keyword rlKeywords machine action context include range contained
-syntax keyword rlKeywords machine action context include import export prepush postpop contained
-syntax keyword rlExprKeywords when inwhen outwhen err lerr eof from to contained
-
-" Case Labels
-syntax keyword caseLabelKeyword case contained
-syntax cluster caseLabelItems contains=ocComment,ocPreproc,ocLiteral,ocType,ocKeyword,caseLabelKeyword,ocNumber,ocBoolean,anyId,fsmType,fsmKeyword
-syntax match caseLabelColon "case" contains=@caseLabelItems
-syntax match caseLabelColon "case[\t ]\+.*:$" contains=@caseLabelItems
-syntax match caseLabelColon "case[\t ]\+.*:[^=:]"me=e-1 contains=@caseLabelItems
-
-" Labels
-syntax match ocLabelColon "^[\t ]*[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:$" contains=anyLabel
-syntax match ocLabelColon "^[\t ]*[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:[^=:]"me=e-1 contains=anyLabel
-
-syntax match rlLabelColon "[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:$" contained contains=anyLabel
-syntax match rlLabelColon "[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:[^=:>]"me=e-1 contained contains=anyLabel
-syntax match anyLabel "[a-zA-Z_][a-zA-Z_0-9]*" contained
-
-" All items that can go in a code block.
-
-syntax cluster inlineItems contains=rlCodeCurly,ocComment,ocPreproc,ocLiteral,ocType,ocKeyword,ocNumber,ocBoolean,ocLabelColon,anyId,fsmType,fsmKeyword,caseLabelColon
-
-" Blocks of code. rlCodeCurly is recursive.
-syntax region rlCodeCurly matchgroup=NONE start="{" end="}" contained contains=@inlineItems
-syntax region rlCodeSemi matchgroup=Type start="\<alphtype\>" start="\<getkey\>" start="\<access\>" start="\<variable\>" matchgroup=NONE end=";" contained contains=@inlineItems
-
-syntax region rlWrite matchgroup=Type start="\<write\>" matchgroup=NONE end="[;)]" contained contains=rlWriteKeywords,rlWriteOptions
-
-syntax keyword rlWriteKeywords init data exec exports start error first_final contained
-syntax keyword rlWriteOptions noerror nofinal noprefix noend nocs contained
-
-"
-" Sync at the start of machine specs.
-"
-" Match The ragel delimiters only if there quotes no ahead on the same line.
-" On the open marker, use & to consume the leader.
-syntax sync match ragelSyncPat grouphere NONE "^[^\'\"%]*%%{&^[^\'\"%]*"
-syntax sync match ragelSyncPat grouphere NONE "^[^\'\"%]*%%[^{]&^[^\'\"%]*"
-syntax sync match ragelSyncPat grouphere NONE "^[^\'\"]*}%%"
-
-"
-" Specifying Groups
-"
-hi link ocComment Comment
-hi link ocPreproc Macro
-hi link ocLiteral String
-hi link ocType Type
-hi link ocKeyword Keyword
-hi link ocNumber Number
-hi link ocBoolean Boolean
-hi link rlComment Comment
-hi link rlNumber Number
-hi link rlLiteral String
-hi link rlAugmentOps Keyword
-hi link rlExprKeywords Keyword
-hi link rlWriteKeywords Keyword
-hi link rlWriteOptions Keyword
-hi link rlKeywords Type
-hi link fsmType Type
-hi link fsmKeyword Keyword
-hi link anyLabel Label
-hi link caseLabelKeyword Keyword
-hi link beginRL Type
-
-let b:current_syntax = "ragel"
diff --git a/ragel-m.vim b/ragel-m.vim
deleted file mode 100644
index c8d9904..0000000
--- a/ragel-m.vim
+++ /dev/null
@@ -1,154 +0,0 @@
-" Vim syntax file
-"
-" Language: Ragel
-" Author: Adrian Thurston
-
-syntax clear
-
-"
-" Outside code
-"
-
-" Comments
-syntax region ocComment start="\/\*" end="\*\/"
-syntax match ocComment "\/\/.*$"
-
-" Anything preprocessor
-syntax match ocPreproc "#.*$"
-
-" Strings
-syntax match ocLiteral "'\(\\.\|[^'\\]\)*'"
-syntax match ocLiteral "\"\(\\.\|[^\"\\]\)*\""
-
-" C/C++ Keywords
-syntax keyword ocType unsigned signed void char short int long float double bool
-syntax keyword ocType inline static extern register const volatile auto
-syntax keyword ocType union enum struct class typedef
-syntax keyword ocType namespace template typename mutable
-syntax keyword ocKeyword break continue default do else for
-syntax keyword ocKeyword goto if return switch while
-syntax keyword ocKeyword new delete this using friend public private protected sizeof
-syntax keyword ocKeyword throw try catch operator typeid
-syntax keyword ocKeyword and bitor xor compl bitand and_eq or_eq xor_eq not not_eq
-syntax keyword ocKeyword static_cast dynamic_cast
-
-" Objective-C Directives
-syntax match ocKeyword "@public\|@private\|@protected"
-syntax match ocKeyword "@interface\|@implementation"
-syntax match ocKeyword "@class\|@end\|@defs"
-syntax match ocKeyword "@encode\|@protocol\|@selector"
-
-" Numbers
-syntax match ocNumber "[0-9][0-9]*"
-syntax match ocNumber "0x[0-9a-fA-F][0-9a-fA-F]*"
-
-" Booleans
-syntax keyword ocBoolean true false
-
-" Identifiers
-syntax match anyId "[a-zA-Z_][a-zA-Z_0-9]*"
-
-" Inline code only
-syntax keyword fsmType fpc fc fcurs fbuf fblen ftargs fstack
-syntax keyword fsmKeyword fhold fgoto fcall fret fentry fnext fexec fbreak
-
-syntax cluster rlItems contains=rlComment,rlLiteral,rlAugmentOps,rlOtherOps,rlKeywords,rlWrite,rlCodeCurly,rlCodeSemi,rlNumber,anyId,rlLabelColon,rlExprKeywords
-
-syntax region machineSpec1 matchgroup=beginRL start="%%{" end="}%%" contains=@rlItems
-syntax region machineSpec2 matchgroup=beginRL start="%%[^{]"rs=e-1 end="$" keepend contains=@rlItems
-syntax region machineSpec2 matchgroup=beginRL start="%%$" end="$" keepend contains=@rlItems
-
-" Comments
-syntax match rlComment "#.*$" contained
-
-" Literals
-syntax match rlLiteral "'\(\\.\|[^'\\]\)*'[i]*" contained
-syntax match rlLiteral "\"\(\\.\|[^\"\\]\)*\"[i]*" contained
-syntax match rlLiteral /\/\(\\.\|[^\/\\]\)*\/[i]*/ contained
-syntax match rlLiteral "\[\(\\.\|[^\]\\]\)*\]" contained
-
-" Numbers
-syntax match rlNumber "[0-9][0-9]*" contained
-syntax match rlNumber "0x[0-9a-fA-F][0-9a-fA-F]*" contained
-
-" Operators
-syntax match rlAugmentOps "[>$%@]" contained
-syntax match rlAugmentOps "<>\|<" contained
-syntax match rlAugmentOps "[>\<$%@][!\^/*~]" contained
-syntax match rlAugmentOps "[>$%]?" contained
-syntax match rlAugmentOps "<>[!\^/*~]" contained
-syntax match rlAugmentOps "=>" contained
-syntax match rlOtherOps "->" contained
-
-syntax match rlOtherOps ":>" contained
-syntax match rlOtherOps ":>>" contained
-syntax match rlOtherOps "<:" contained
-
-" Keywords
-" FIXME: Enable the range keyword post 5.17.
-" syntax keyword rlKeywords machine action context include range contained
-syntax keyword rlKeywords machine action context include import export prepush postpop contained
-syntax keyword rlExprKeywords when inwhen outwhen err lerr eof from to contained
-
-" Case Labels
-syntax keyword caseLabelKeyword case contained
-syntax cluster caseLabelItems contains=ocComment,ocPreproc,ocLiteral,ocType,ocKeyword,caseLabelKeyword,ocNumber,ocBoolean,anyId,fsmType,fsmKeyword
-syntax match caseLabelColon "case" contains=@caseLabelItems
-syntax match caseLabelColon "case[\t ]\+.*:$" contains=@caseLabelItems
-syntax match caseLabelColon "case[\t ]\+.*:[^=:]"me=e-1 contains=@caseLabelItems
-
-" Labels
-syntax match ocLabelColon "^[\t ]*[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:$" contains=anyLabel
-syntax match ocLabelColon "^[\t ]*[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:[^=:]"me=e-1 contains=anyLabel
-
-syntax match rlLabelColon "[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:$" contained contains=anyLabel
-syntax match rlLabelColon "[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:[^=:>]"me=e-1 contained contains=anyLabel
-syntax match anyLabel "[a-zA-Z_][a-zA-Z_0-9]*" contained
-
-" All items that can go in a code block.
-
-syntax cluster inlineItems contains=rlCodeCurly,ocComment,ocPreproc,ocLiteral,ocType,ocKeyword,ocNumber,ocBoolean,ocLabelColon,anyId,fsmType,fsmKeyword,caseLabelColon
-
-" Blocks of code. rlCodeCurly is recursive.
-syntax region rlCodeCurly matchgroup=NONE start="{" end="}" contained contains=@inlineItems
-syntax region rlCodeSemi matchgroup=Type start="\<alphtype\>" start="\<getkey\>" start="\<access\>" start="\<variable\>" matchgroup=NONE end=";" contained contains=@inlineItems
-
-syntax region rlWrite matchgroup=Type start="\<write\>" matchgroup=NONE end="[;)]" contained contains=rlWriteKeywords,rlWriteOptions
-
-syntax keyword rlWriteKeywords init data exec exports start error first_final contained
-syntax keyword rlWriteOptions noerror nofinal noprefix noend nocs contained
-
-"
-" Sync at the start of machine specs.
-"
-" Match The ragel delimiters only if there quotes no ahead on the same line.
-" On the open marker, use & to consume the leader.
-syntax sync match ragelSyncPat grouphere NONE "^[^\'\"%]*%%{&^[^\'\"%]*"
-syntax sync match ragelSyncPat grouphere NONE "^[^\'\"%]*%%[^{]&^[^\'\"%]*"
-syntax sync match ragelSyncPat grouphere NONE "^[^\'\"]*}%%"
-
-"
-" Specifying Groups
-"
-hi link ocComment Comment
-hi link ocPreproc Macro
-hi link ocLiteral String
-hi link ocType Type
-hi link ocKeyword Keyword
-hi link ocNumber Number
-hi link ocBoolean Boolean
-hi link rlComment Comment
-hi link rlNumber Number
-hi link rlLiteral String
-hi link rlAugmentOps Keyword
-hi link rlExprKeywords Keyword
-hi link rlWriteKeywords Keyword
-hi link rlWriteOptions Keyword
-hi link rlKeywords Type
-hi link fsmType Type
-hi link fsmKeyword Keyword
-hi link anyLabel Label
-hi link caseLabelKeyword Keyword
-hi link beginRL Type
-
-let b:current_syntax = "ragel"
diff --git a/ragel.vim b/ragel.vim
index fa77e43..f94ae0f 100644
--- a/ragel.vim
+++ b/ragel.vim
@@ -34,7 +34,7 @@ syntax keyword ocKeyword and bitor xor compl bitand and_eq or_eq xor_eq not not_
syntax keyword ocKeyword static_cast dynamic_cast
" Numbers
-syntax match ocNumber "[0-9][0-9]*"
+syntax match ocNumber "[0-9][0-9]*[Ll]\?[Ll]\?"
syntax match ocNumber "0x[0-9a-fA-F][0-9a-fA-F]*"
" Booleans
@@ -47,7 +47,7 @@ syntax match anyId "[a-zA-Z_][a-zA-Z_0-9]*"
syntax keyword fsmType fpc fc fcurs fbuf fblen ftargs fstack
syntax keyword fsmKeyword fhold fgoto fcall fret fentry fnext fexec fbreak
-syntax cluster rlItems contains=rlComment,rlLiteral,rlAugmentOps,rlOtherOps,rlKeywords,rlWrite,rlCodeCurly,rlCodeSemi,rlNumber,anyId,rlLabelColon,rlExprKeywords
+syntax cluster rlItems contains=rlComment,rlLiteral,rlAugmentOps,rlOtherOps,rlKeywords,rlWrite,rlCodeCurly,rlCodeSemi,rlNumber,anyId,rlLabelColon,rlExprKeywords,rlBuiltIns
syntax region machineSpec1 matchgroup=beginRL start="%%{" end="}%%" contains=@rlItems
syntax region machineSpec2 matchgroup=beginRL start="%%[^{]"rs=e-1 end="$" keepend contains=@rlItems
@@ -85,6 +85,9 @@ syntax match rlOtherOps "<:" contained
syntax keyword rlKeywords machine action context include import export prepush postpop contained
syntax keyword rlExprKeywords when inwhen outwhen err lerr eof from to contained
+" Built-in rules
+syntax keyword rlBuiltIns any ascii extend alpha digit alnum lower upper xdigit cntrl graph print punct space zlen empty contained
+
" Case Labels
syntax keyword caseLabelKeyword case contained
syntax cluster caseLabelItems contains=ocComment,ocPreproc,ocLiteral,ocType,ocKeyword,caseLabelKeyword,ocNumber,ocBoolean,anyId,fsmType,fsmKeyword
@@ -145,5 +148,6 @@ hi link fsmKeyword Keyword
hi link anyLabel Label
hi link caseLabelKeyword Keyword
hi link beginRL Type
+hi link rlBuiltIns Constant
let b:current_syntax = "ragel"
diff --git a/ragel/Makefile.am b/ragel/Makefile.am
index db3610c..ac7406c 100644
--- a/ragel/Makefile.am
+++ b/ragel/Makefile.am
@@ -13,6 +13,9 @@ ragel_SOURCES = \
dotcodegen.h parsetree.h rlscan.h version.h cdflat.h common.h \
csftable.h fsmgraph.h pcheck.h rubycodegen.h xmlcodegen.h cdftable.h \
csgoto.h gendata.h ragel.h rubyfflat.h \
+ gocodegen.h gotable.h goftable.h goflat.h gofflat.h gogoto.h gofgoto.h \
+ goipgoto.h gotablish.h \
+ mlcodegen.h mltable.h mlftable.h mlflat.h mlfflat.h mlgoto.h \
main.cpp parsetree.cpp parsedata.cpp fsmstate.cpp fsmbase.cpp \
fsmattach.cpp fsmmin.cpp fsmgraph.cpp fsmap.cpp rlscan.cpp rlparse.cpp \
inputdata.cpp common.cpp redfsm.cpp gendata.cpp cdcodegen.cpp \
@@ -20,7 +23,10 @@ ragel_SOURCES = \
cdipgoto.cpp cdsplit.cpp javacodegen.cpp rubycodegen.cpp rubytable.cpp \
rubyftable.cpp rubyflat.cpp rubyfflat.cpp rbxgoto.cpp cscodegen.cpp \
cstable.cpp csftable.cpp csflat.cpp csfflat.cpp csgoto.cpp csfgoto.cpp \
- csipgoto.cpp cssplit.cpp dotcodegen.cpp xmlcodegen.cpp
+ csipgoto.cpp cssplit.cpp dotcodegen.cpp xmlcodegen.cpp \
+ gocodegen.cpp gotable.cpp goftable.cpp goflat.cpp gofflat.cpp gogoto.cpp gofgoto.cpp \
+ goipgoto.cpp gotablish.cpp \
+ mlcodegen.cpp mltable.cpp mlftable.cpp mlflat.cpp mlfflat.cpp mlgoto.cpp
BUILT_SOURCES = \
rlscan.cpp rlparse.h rlparse.cpp version.h
diff --git a/ragel/Makefile.in b/ragel/Makefile.in
new file mode 100644
index 0000000..65f61e6
--- /dev/null
+++ b/ragel/Makefile.in
@@ -0,0 +1,1427 @@
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+bin_PROGRAMS = ragel$(EXEEXT)
+subdir = ragel
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/config.h.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_ragel_OBJECTS = ragel-main.$(OBJEXT) ragel-parsetree.$(OBJEXT) \
+ ragel-parsedata.$(OBJEXT) ragel-fsmstate.$(OBJEXT) \
+ ragel-fsmbase.$(OBJEXT) ragel-fsmattach.$(OBJEXT) \
+ ragel-fsmmin.$(OBJEXT) ragel-fsmgraph.$(OBJEXT) \
+ ragel-fsmap.$(OBJEXT) ragel-rlscan.$(OBJEXT) \
+ ragel-rlparse.$(OBJEXT) ragel-inputdata.$(OBJEXT) \
+ ragel-common.$(OBJEXT) ragel-redfsm.$(OBJEXT) \
+ ragel-gendata.$(OBJEXT) ragel-cdcodegen.$(OBJEXT) \
+ ragel-cdtable.$(OBJEXT) ragel-cdftable.$(OBJEXT) \
+ ragel-cdflat.$(OBJEXT) ragel-cdfflat.$(OBJEXT) \
+ ragel-cdgoto.$(OBJEXT) ragel-cdfgoto.$(OBJEXT) \
+ ragel-cdipgoto.$(OBJEXT) ragel-cdsplit.$(OBJEXT) \
+ ragel-javacodegen.$(OBJEXT) ragel-rubycodegen.$(OBJEXT) \
+ ragel-rubytable.$(OBJEXT) ragel-rubyftable.$(OBJEXT) \
+ ragel-rubyflat.$(OBJEXT) ragel-rubyfflat.$(OBJEXT) \
+ ragel-rbxgoto.$(OBJEXT) ragel-cscodegen.$(OBJEXT) \
+ ragel-cstable.$(OBJEXT) ragel-csftable.$(OBJEXT) \
+ ragel-csflat.$(OBJEXT) ragel-csfflat.$(OBJEXT) \
+ ragel-csgoto.$(OBJEXT) ragel-csfgoto.$(OBJEXT) \
+ ragel-csipgoto.$(OBJEXT) ragel-cssplit.$(OBJEXT) \
+ ragel-dotcodegen.$(OBJEXT) ragel-xmlcodegen.$(OBJEXT) \
+ ragel-gocodegen.$(OBJEXT) ragel-gotable.$(OBJEXT) \
+ ragel-goftable.$(OBJEXT) ragel-goflat.$(OBJEXT) \
+ ragel-gofflat.$(OBJEXT) ragel-gogoto.$(OBJEXT) \
+ ragel-gofgoto.$(OBJEXT) ragel-goipgoto.$(OBJEXT) \
+ ragel-gotablish.$(OBJEXT) ragel-mlcodegen.$(OBJEXT) \
+ ragel-mltable.$(OBJEXT) ragel-mlftable.$(OBJEXT) \
+ ragel-mlflat.$(OBJEXT) ragel-mlfflat.$(OBJEXT) \
+ ragel-mlgoto.$(OBJEXT)
+ragel_OBJECTS = $(am_ragel_OBJECTS)
+ragel_LDADD = $(LDADD)
+ragel_LINK = $(CXXLD) $(ragel_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(ragel_SOURCES)
+DIST_SOURCES = $(ragel_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+FIG2DEV = @FIG2DEV@
+GDC = @GDC@
+GMCS = @GMCS@
+GOBIN = @GOBIN@
+GOBJC = @GOBJC@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAC = @JAVAC@
+KELBT = @KELBT@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PDFLATEX = @PDFLATEX@
+PUBDATE = @PUBDATE@
+RAGEL = @RAGEL@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TXL = @TXL@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+INCLUDES = -I$(top_srcdir)/aapl
+ragel_CXXFLAGS = -Wall
+ragel_SOURCES = \
+ buffer.h cdgoto.h cscodegen.h csipgoto.h inputdata.h rbxgoto.h \
+ rubyflat.h cdcodegen.h cdipgoto.h csfflat.h cssplit.h javacodegen.h \
+ redfsm.h rubyftable.h cdfflat.h cdsplit.h csfgoto.h cstable.h \
+ parsedata.h rlparse.h rubytable.h cdfgoto.h cdtable.h csflat.h \
+ dotcodegen.h parsetree.h rlscan.h version.h cdflat.h common.h \
+ csftable.h fsmgraph.h pcheck.h rubycodegen.h xmlcodegen.h cdftable.h \
+ csgoto.h gendata.h ragel.h rubyfflat.h \
+ gocodegen.h gotable.h goftable.h goflat.h gofflat.h gogoto.h gofgoto.h \
+ goipgoto.h gotablish.h \
+ mlcodegen.h mltable.h mlftable.h mlflat.h mlfflat.h mlgoto.h \
+ main.cpp parsetree.cpp parsedata.cpp fsmstate.cpp fsmbase.cpp \
+ fsmattach.cpp fsmmin.cpp fsmgraph.cpp fsmap.cpp rlscan.cpp rlparse.cpp \
+ inputdata.cpp common.cpp redfsm.cpp gendata.cpp cdcodegen.cpp \
+ cdtable.cpp cdftable.cpp cdflat.cpp cdfflat.cpp cdgoto.cpp cdfgoto.cpp \
+ cdipgoto.cpp cdsplit.cpp javacodegen.cpp rubycodegen.cpp rubytable.cpp \
+ rubyftable.cpp rubyflat.cpp rubyfflat.cpp rbxgoto.cpp cscodegen.cpp \
+ cstable.cpp csftable.cpp csflat.cpp csfflat.cpp csgoto.cpp csfgoto.cpp \
+ csipgoto.cpp cssplit.cpp dotcodegen.cpp xmlcodegen.cpp \
+ gocodegen.cpp gotable.cpp goftable.cpp goflat.cpp gofflat.cpp gogoto.cpp gofgoto.cpp \
+ goipgoto.cpp gotablish.cpp \
+ mlcodegen.cpp mltable.cpp mlftable.cpp mlflat.cpp mlfflat.cpp mlgoto.cpp
+
+BUILT_SOURCES = \
+ rlscan.cpp rlparse.h rlparse.cpp version.h
+
+EXTRA_DIST = rlscan.rl rlparse.kh rlparse.kl
+@BUILD_PARSERS_TRUE@CLEANFILES = \
+@BUILD_PARSERS_TRUE@ rlscan.cpp rlparse.h rlparse.cpp
+
+all: $(BUILT_SOURCES) config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ragel/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign ragel/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+ @if test ! -f $@; then rm -f stamp-h1; else :; fi
+ @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status ragel/config.h
+$(srcdir)/config.h.in: $(am__configure_deps)
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f config.h stamp-h1
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p; \
+ then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+ragel$(EXEEXT): $(ragel_OBJECTS) $(ragel_DEPENDENCIES) $(EXTRA_ragel_DEPENDENCIES)
+ @rm -f ragel$(EXEEXT)
+ $(ragel_LINK) $(ragel_OBJECTS) $(ragel_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-cdcodegen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-cdfflat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-cdfgoto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-cdflat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-cdftable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-cdgoto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-cdipgoto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-cdsplit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-cdtable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-common.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-cscodegen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-csfflat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-csfgoto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-csflat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-csftable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-csgoto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-csipgoto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-cssplit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-cstable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-dotcodegen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-fsmap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-fsmattach.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-fsmbase.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-fsmgraph.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-fsmmin.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-fsmstate.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-gendata.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-gocodegen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-gofflat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-gofgoto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-goflat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-goftable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-gogoto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-goipgoto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-gotable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-gotablish.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-inputdata.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-javacodegen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-mlcodegen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-mlfflat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-mlflat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-mlftable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-mlgoto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-mltable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-parsedata.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-parsetree.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-rbxgoto.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-redfsm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-rlparse.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-rlscan.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-rubycodegen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-rubyfflat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-rubyflat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-rubyftable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-rubytable.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ragel-xmlcodegen.Po@am__quote@
+
+.cpp.o:
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+ragel-main.o: main.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-main.o -MD -MP -MF $(DEPDIR)/ragel-main.Tpo -c -o ragel-main.o `test -f 'main.cpp' || echo '$(srcdir)/'`main.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-main.Tpo $(DEPDIR)/ragel-main.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='main.cpp' object='ragel-main.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-main.o `test -f 'main.cpp' || echo '$(srcdir)/'`main.cpp
+
+ragel-main.obj: main.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-main.obj -MD -MP -MF $(DEPDIR)/ragel-main.Tpo -c -o ragel-main.obj `if test -f 'main.cpp'; then $(CYGPATH_W) 'main.cpp'; else $(CYGPATH_W) '$(srcdir)/main.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-main.Tpo $(DEPDIR)/ragel-main.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='main.cpp' object='ragel-main.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-main.obj `if test -f 'main.cpp'; then $(CYGPATH_W) 'main.cpp'; else $(CYGPATH_W) '$(srcdir)/main.cpp'; fi`
+
+ragel-parsetree.o: parsetree.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-parsetree.o -MD -MP -MF $(DEPDIR)/ragel-parsetree.Tpo -c -o ragel-parsetree.o `test -f 'parsetree.cpp' || echo '$(srcdir)/'`parsetree.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-parsetree.Tpo $(DEPDIR)/ragel-parsetree.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='parsetree.cpp' object='ragel-parsetree.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-parsetree.o `test -f 'parsetree.cpp' || echo '$(srcdir)/'`parsetree.cpp
+
+ragel-parsetree.obj: parsetree.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-parsetree.obj -MD -MP -MF $(DEPDIR)/ragel-parsetree.Tpo -c -o ragel-parsetree.obj `if test -f 'parsetree.cpp'; then $(CYGPATH_W) 'parsetree.cpp'; else $(CYGPATH_W) '$(srcdir)/parsetree.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-parsetree.Tpo $(DEPDIR)/ragel-parsetree.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='parsetree.cpp' object='ragel-parsetree.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-parsetree.obj `if test -f 'parsetree.cpp'; then $(CYGPATH_W) 'parsetree.cpp'; else $(CYGPATH_W) '$(srcdir)/parsetree.cpp'; fi`
+
+ragel-parsedata.o: parsedata.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-parsedata.o -MD -MP -MF $(DEPDIR)/ragel-parsedata.Tpo -c -o ragel-parsedata.o `test -f 'parsedata.cpp' || echo '$(srcdir)/'`parsedata.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-parsedata.Tpo $(DEPDIR)/ragel-parsedata.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='parsedata.cpp' object='ragel-parsedata.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-parsedata.o `test -f 'parsedata.cpp' || echo '$(srcdir)/'`parsedata.cpp
+
+ragel-parsedata.obj: parsedata.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-parsedata.obj -MD -MP -MF $(DEPDIR)/ragel-parsedata.Tpo -c -o ragel-parsedata.obj `if test -f 'parsedata.cpp'; then $(CYGPATH_W) 'parsedata.cpp'; else $(CYGPATH_W) '$(srcdir)/parsedata.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-parsedata.Tpo $(DEPDIR)/ragel-parsedata.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='parsedata.cpp' object='ragel-parsedata.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-parsedata.obj `if test -f 'parsedata.cpp'; then $(CYGPATH_W) 'parsedata.cpp'; else $(CYGPATH_W) '$(srcdir)/parsedata.cpp'; fi`
+
+ragel-fsmstate.o: fsmstate.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-fsmstate.o -MD -MP -MF $(DEPDIR)/ragel-fsmstate.Tpo -c -o ragel-fsmstate.o `test -f 'fsmstate.cpp' || echo '$(srcdir)/'`fsmstate.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-fsmstate.Tpo $(DEPDIR)/ragel-fsmstate.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fsmstate.cpp' object='ragel-fsmstate.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-fsmstate.o `test -f 'fsmstate.cpp' || echo '$(srcdir)/'`fsmstate.cpp
+
+ragel-fsmstate.obj: fsmstate.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-fsmstate.obj -MD -MP -MF $(DEPDIR)/ragel-fsmstate.Tpo -c -o ragel-fsmstate.obj `if test -f 'fsmstate.cpp'; then $(CYGPATH_W) 'fsmstate.cpp'; else $(CYGPATH_W) '$(srcdir)/fsmstate.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-fsmstate.Tpo $(DEPDIR)/ragel-fsmstate.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fsmstate.cpp' object='ragel-fsmstate.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-fsmstate.obj `if test -f 'fsmstate.cpp'; then $(CYGPATH_W) 'fsmstate.cpp'; else $(CYGPATH_W) '$(srcdir)/fsmstate.cpp'; fi`
+
+ragel-fsmbase.o: fsmbase.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-fsmbase.o -MD -MP -MF $(DEPDIR)/ragel-fsmbase.Tpo -c -o ragel-fsmbase.o `test -f 'fsmbase.cpp' || echo '$(srcdir)/'`fsmbase.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-fsmbase.Tpo $(DEPDIR)/ragel-fsmbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fsmbase.cpp' object='ragel-fsmbase.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-fsmbase.o `test -f 'fsmbase.cpp' || echo '$(srcdir)/'`fsmbase.cpp
+
+ragel-fsmbase.obj: fsmbase.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-fsmbase.obj -MD -MP -MF $(DEPDIR)/ragel-fsmbase.Tpo -c -o ragel-fsmbase.obj `if test -f 'fsmbase.cpp'; then $(CYGPATH_W) 'fsmbase.cpp'; else $(CYGPATH_W) '$(srcdir)/fsmbase.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-fsmbase.Tpo $(DEPDIR)/ragel-fsmbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fsmbase.cpp' object='ragel-fsmbase.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-fsmbase.obj `if test -f 'fsmbase.cpp'; then $(CYGPATH_W) 'fsmbase.cpp'; else $(CYGPATH_W) '$(srcdir)/fsmbase.cpp'; fi`
+
+ragel-fsmattach.o: fsmattach.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-fsmattach.o -MD -MP -MF $(DEPDIR)/ragel-fsmattach.Tpo -c -o ragel-fsmattach.o `test -f 'fsmattach.cpp' || echo '$(srcdir)/'`fsmattach.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-fsmattach.Tpo $(DEPDIR)/ragel-fsmattach.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fsmattach.cpp' object='ragel-fsmattach.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-fsmattach.o `test -f 'fsmattach.cpp' || echo '$(srcdir)/'`fsmattach.cpp
+
+ragel-fsmattach.obj: fsmattach.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-fsmattach.obj -MD -MP -MF $(DEPDIR)/ragel-fsmattach.Tpo -c -o ragel-fsmattach.obj `if test -f 'fsmattach.cpp'; then $(CYGPATH_W) 'fsmattach.cpp'; else $(CYGPATH_W) '$(srcdir)/fsmattach.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-fsmattach.Tpo $(DEPDIR)/ragel-fsmattach.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fsmattach.cpp' object='ragel-fsmattach.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-fsmattach.obj `if test -f 'fsmattach.cpp'; then $(CYGPATH_W) 'fsmattach.cpp'; else $(CYGPATH_W) '$(srcdir)/fsmattach.cpp'; fi`
+
+ragel-fsmmin.o: fsmmin.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-fsmmin.o -MD -MP -MF $(DEPDIR)/ragel-fsmmin.Tpo -c -o ragel-fsmmin.o `test -f 'fsmmin.cpp' || echo '$(srcdir)/'`fsmmin.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-fsmmin.Tpo $(DEPDIR)/ragel-fsmmin.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fsmmin.cpp' object='ragel-fsmmin.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-fsmmin.o `test -f 'fsmmin.cpp' || echo '$(srcdir)/'`fsmmin.cpp
+
+ragel-fsmmin.obj: fsmmin.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-fsmmin.obj -MD -MP -MF $(DEPDIR)/ragel-fsmmin.Tpo -c -o ragel-fsmmin.obj `if test -f 'fsmmin.cpp'; then $(CYGPATH_W) 'fsmmin.cpp'; else $(CYGPATH_W) '$(srcdir)/fsmmin.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-fsmmin.Tpo $(DEPDIR)/ragel-fsmmin.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fsmmin.cpp' object='ragel-fsmmin.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-fsmmin.obj `if test -f 'fsmmin.cpp'; then $(CYGPATH_W) 'fsmmin.cpp'; else $(CYGPATH_W) '$(srcdir)/fsmmin.cpp'; fi`
+
+ragel-fsmgraph.o: fsmgraph.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-fsmgraph.o -MD -MP -MF $(DEPDIR)/ragel-fsmgraph.Tpo -c -o ragel-fsmgraph.o `test -f 'fsmgraph.cpp' || echo '$(srcdir)/'`fsmgraph.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-fsmgraph.Tpo $(DEPDIR)/ragel-fsmgraph.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fsmgraph.cpp' object='ragel-fsmgraph.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-fsmgraph.o `test -f 'fsmgraph.cpp' || echo '$(srcdir)/'`fsmgraph.cpp
+
+ragel-fsmgraph.obj: fsmgraph.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-fsmgraph.obj -MD -MP -MF $(DEPDIR)/ragel-fsmgraph.Tpo -c -o ragel-fsmgraph.obj `if test -f 'fsmgraph.cpp'; then $(CYGPATH_W) 'fsmgraph.cpp'; else $(CYGPATH_W) '$(srcdir)/fsmgraph.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-fsmgraph.Tpo $(DEPDIR)/ragel-fsmgraph.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fsmgraph.cpp' object='ragel-fsmgraph.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-fsmgraph.obj `if test -f 'fsmgraph.cpp'; then $(CYGPATH_W) 'fsmgraph.cpp'; else $(CYGPATH_W) '$(srcdir)/fsmgraph.cpp'; fi`
+
+ragel-fsmap.o: fsmap.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-fsmap.o -MD -MP -MF $(DEPDIR)/ragel-fsmap.Tpo -c -o ragel-fsmap.o `test -f 'fsmap.cpp' || echo '$(srcdir)/'`fsmap.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-fsmap.Tpo $(DEPDIR)/ragel-fsmap.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fsmap.cpp' object='ragel-fsmap.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-fsmap.o `test -f 'fsmap.cpp' || echo '$(srcdir)/'`fsmap.cpp
+
+ragel-fsmap.obj: fsmap.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-fsmap.obj -MD -MP -MF $(DEPDIR)/ragel-fsmap.Tpo -c -o ragel-fsmap.obj `if test -f 'fsmap.cpp'; then $(CYGPATH_W) 'fsmap.cpp'; else $(CYGPATH_W) '$(srcdir)/fsmap.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-fsmap.Tpo $(DEPDIR)/ragel-fsmap.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='fsmap.cpp' object='ragel-fsmap.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-fsmap.obj `if test -f 'fsmap.cpp'; then $(CYGPATH_W) 'fsmap.cpp'; else $(CYGPATH_W) '$(srcdir)/fsmap.cpp'; fi`
+
+ragel-rlscan.o: rlscan.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-rlscan.o -MD -MP -MF $(DEPDIR)/ragel-rlscan.Tpo -c -o ragel-rlscan.o `test -f 'rlscan.cpp' || echo '$(srcdir)/'`rlscan.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-rlscan.Tpo $(DEPDIR)/ragel-rlscan.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rlscan.cpp' object='ragel-rlscan.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-rlscan.o `test -f 'rlscan.cpp' || echo '$(srcdir)/'`rlscan.cpp
+
+ragel-rlscan.obj: rlscan.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-rlscan.obj -MD -MP -MF $(DEPDIR)/ragel-rlscan.Tpo -c -o ragel-rlscan.obj `if test -f 'rlscan.cpp'; then $(CYGPATH_W) 'rlscan.cpp'; else $(CYGPATH_W) '$(srcdir)/rlscan.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-rlscan.Tpo $(DEPDIR)/ragel-rlscan.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rlscan.cpp' object='ragel-rlscan.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-rlscan.obj `if test -f 'rlscan.cpp'; then $(CYGPATH_W) 'rlscan.cpp'; else $(CYGPATH_W) '$(srcdir)/rlscan.cpp'; fi`
+
+ragel-rlparse.o: rlparse.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-rlparse.o -MD -MP -MF $(DEPDIR)/ragel-rlparse.Tpo -c -o ragel-rlparse.o `test -f 'rlparse.cpp' || echo '$(srcdir)/'`rlparse.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-rlparse.Tpo $(DEPDIR)/ragel-rlparse.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rlparse.cpp' object='ragel-rlparse.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-rlparse.o `test -f 'rlparse.cpp' || echo '$(srcdir)/'`rlparse.cpp
+
+ragel-rlparse.obj: rlparse.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-rlparse.obj -MD -MP -MF $(DEPDIR)/ragel-rlparse.Tpo -c -o ragel-rlparse.obj `if test -f 'rlparse.cpp'; then $(CYGPATH_W) 'rlparse.cpp'; else $(CYGPATH_W) '$(srcdir)/rlparse.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-rlparse.Tpo $(DEPDIR)/ragel-rlparse.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rlparse.cpp' object='ragel-rlparse.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-rlparse.obj `if test -f 'rlparse.cpp'; then $(CYGPATH_W) 'rlparse.cpp'; else $(CYGPATH_W) '$(srcdir)/rlparse.cpp'; fi`
+
+ragel-inputdata.o: inputdata.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-inputdata.o -MD -MP -MF $(DEPDIR)/ragel-inputdata.Tpo -c -o ragel-inputdata.o `test -f 'inputdata.cpp' || echo '$(srcdir)/'`inputdata.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-inputdata.Tpo $(DEPDIR)/ragel-inputdata.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='inputdata.cpp' object='ragel-inputdata.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-inputdata.o `test -f 'inputdata.cpp' || echo '$(srcdir)/'`inputdata.cpp
+
+ragel-inputdata.obj: inputdata.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-inputdata.obj -MD -MP -MF $(DEPDIR)/ragel-inputdata.Tpo -c -o ragel-inputdata.obj `if test -f 'inputdata.cpp'; then $(CYGPATH_W) 'inputdata.cpp'; else $(CYGPATH_W) '$(srcdir)/inputdata.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-inputdata.Tpo $(DEPDIR)/ragel-inputdata.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='inputdata.cpp' object='ragel-inputdata.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-inputdata.obj `if test -f 'inputdata.cpp'; then $(CYGPATH_W) 'inputdata.cpp'; else $(CYGPATH_W) '$(srcdir)/inputdata.cpp'; fi`
+
+ragel-common.o: common.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-common.o -MD -MP -MF $(DEPDIR)/ragel-common.Tpo -c -o ragel-common.o `test -f 'common.cpp' || echo '$(srcdir)/'`common.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-common.Tpo $(DEPDIR)/ragel-common.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='common.cpp' object='ragel-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-common.o `test -f 'common.cpp' || echo '$(srcdir)/'`common.cpp
+
+ragel-common.obj: common.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-common.obj -MD -MP -MF $(DEPDIR)/ragel-common.Tpo -c -o ragel-common.obj `if test -f 'common.cpp'; then $(CYGPATH_W) 'common.cpp'; else $(CYGPATH_W) '$(srcdir)/common.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-common.Tpo $(DEPDIR)/ragel-common.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='common.cpp' object='ragel-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-common.obj `if test -f 'common.cpp'; then $(CYGPATH_W) 'common.cpp'; else $(CYGPATH_W) '$(srcdir)/common.cpp'; fi`
+
+ragel-redfsm.o: redfsm.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-redfsm.o -MD -MP -MF $(DEPDIR)/ragel-redfsm.Tpo -c -o ragel-redfsm.o `test -f 'redfsm.cpp' || echo '$(srcdir)/'`redfsm.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-redfsm.Tpo $(DEPDIR)/ragel-redfsm.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='redfsm.cpp' object='ragel-redfsm.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-redfsm.o `test -f 'redfsm.cpp' || echo '$(srcdir)/'`redfsm.cpp
+
+ragel-redfsm.obj: redfsm.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-redfsm.obj -MD -MP -MF $(DEPDIR)/ragel-redfsm.Tpo -c -o ragel-redfsm.obj `if test -f 'redfsm.cpp'; then $(CYGPATH_W) 'redfsm.cpp'; else $(CYGPATH_W) '$(srcdir)/redfsm.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-redfsm.Tpo $(DEPDIR)/ragel-redfsm.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='redfsm.cpp' object='ragel-redfsm.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-redfsm.obj `if test -f 'redfsm.cpp'; then $(CYGPATH_W) 'redfsm.cpp'; else $(CYGPATH_W) '$(srcdir)/redfsm.cpp'; fi`
+
+ragel-gendata.o: gendata.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-gendata.o -MD -MP -MF $(DEPDIR)/ragel-gendata.Tpo -c -o ragel-gendata.o `test -f 'gendata.cpp' || echo '$(srcdir)/'`gendata.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-gendata.Tpo $(DEPDIR)/ragel-gendata.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gendata.cpp' object='ragel-gendata.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-gendata.o `test -f 'gendata.cpp' || echo '$(srcdir)/'`gendata.cpp
+
+ragel-gendata.obj: gendata.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-gendata.obj -MD -MP -MF $(DEPDIR)/ragel-gendata.Tpo -c -o ragel-gendata.obj `if test -f 'gendata.cpp'; then $(CYGPATH_W) 'gendata.cpp'; else $(CYGPATH_W) '$(srcdir)/gendata.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-gendata.Tpo $(DEPDIR)/ragel-gendata.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gendata.cpp' object='ragel-gendata.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-gendata.obj `if test -f 'gendata.cpp'; then $(CYGPATH_W) 'gendata.cpp'; else $(CYGPATH_W) '$(srcdir)/gendata.cpp'; fi`
+
+ragel-cdcodegen.o: cdcodegen.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdcodegen.o -MD -MP -MF $(DEPDIR)/ragel-cdcodegen.Tpo -c -o ragel-cdcodegen.o `test -f 'cdcodegen.cpp' || echo '$(srcdir)/'`cdcodegen.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdcodegen.Tpo $(DEPDIR)/ragel-cdcodegen.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdcodegen.cpp' object='ragel-cdcodegen.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdcodegen.o `test -f 'cdcodegen.cpp' || echo '$(srcdir)/'`cdcodegen.cpp
+
+ragel-cdcodegen.obj: cdcodegen.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdcodegen.obj -MD -MP -MF $(DEPDIR)/ragel-cdcodegen.Tpo -c -o ragel-cdcodegen.obj `if test -f 'cdcodegen.cpp'; then $(CYGPATH_W) 'cdcodegen.cpp'; else $(CYGPATH_W) '$(srcdir)/cdcodegen.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdcodegen.Tpo $(DEPDIR)/ragel-cdcodegen.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdcodegen.cpp' object='ragel-cdcodegen.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdcodegen.obj `if test -f 'cdcodegen.cpp'; then $(CYGPATH_W) 'cdcodegen.cpp'; else $(CYGPATH_W) '$(srcdir)/cdcodegen.cpp'; fi`
+
+ragel-cdtable.o: cdtable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdtable.o -MD -MP -MF $(DEPDIR)/ragel-cdtable.Tpo -c -o ragel-cdtable.o `test -f 'cdtable.cpp' || echo '$(srcdir)/'`cdtable.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdtable.Tpo $(DEPDIR)/ragel-cdtable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdtable.cpp' object='ragel-cdtable.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdtable.o `test -f 'cdtable.cpp' || echo '$(srcdir)/'`cdtable.cpp
+
+ragel-cdtable.obj: cdtable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdtable.obj -MD -MP -MF $(DEPDIR)/ragel-cdtable.Tpo -c -o ragel-cdtable.obj `if test -f 'cdtable.cpp'; then $(CYGPATH_W) 'cdtable.cpp'; else $(CYGPATH_W) '$(srcdir)/cdtable.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdtable.Tpo $(DEPDIR)/ragel-cdtable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdtable.cpp' object='ragel-cdtable.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdtable.obj `if test -f 'cdtable.cpp'; then $(CYGPATH_W) 'cdtable.cpp'; else $(CYGPATH_W) '$(srcdir)/cdtable.cpp'; fi`
+
+ragel-cdftable.o: cdftable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdftable.o -MD -MP -MF $(DEPDIR)/ragel-cdftable.Tpo -c -o ragel-cdftable.o `test -f 'cdftable.cpp' || echo '$(srcdir)/'`cdftable.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdftable.Tpo $(DEPDIR)/ragel-cdftable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdftable.cpp' object='ragel-cdftable.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdftable.o `test -f 'cdftable.cpp' || echo '$(srcdir)/'`cdftable.cpp
+
+ragel-cdftable.obj: cdftable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdftable.obj -MD -MP -MF $(DEPDIR)/ragel-cdftable.Tpo -c -o ragel-cdftable.obj `if test -f 'cdftable.cpp'; then $(CYGPATH_W) 'cdftable.cpp'; else $(CYGPATH_W) '$(srcdir)/cdftable.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdftable.Tpo $(DEPDIR)/ragel-cdftable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdftable.cpp' object='ragel-cdftable.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdftable.obj `if test -f 'cdftable.cpp'; then $(CYGPATH_W) 'cdftable.cpp'; else $(CYGPATH_W) '$(srcdir)/cdftable.cpp'; fi`
+
+ragel-cdflat.o: cdflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdflat.o -MD -MP -MF $(DEPDIR)/ragel-cdflat.Tpo -c -o ragel-cdflat.o `test -f 'cdflat.cpp' || echo '$(srcdir)/'`cdflat.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdflat.Tpo $(DEPDIR)/ragel-cdflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdflat.cpp' object='ragel-cdflat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdflat.o `test -f 'cdflat.cpp' || echo '$(srcdir)/'`cdflat.cpp
+
+ragel-cdflat.obj: cdflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdflat.obj -MD -MP -MF $(DEPDIR)/ragel-cdflat.Tpo -c -o ragel-cdflat.obj `if test -f 'cdflat.cpp'; then $(CYGPATH_W) 'cdflat.cpp'; else $(CYGPATH_W) '$(srcdir)/cdflat.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdflat.Tpo $(DEPDIR)/ragel-cdflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdflat.cpp' object='ragel-cdflat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdflat.obj `if test -f 'cdflat.cpp'; then $(CYGPATH_W) 'cdflat.cpp'; else $(CYGPATH_W) '$(srcdir)/cdflat.cpp'; fi`
+
+ragel-cdfflat.o: cdfflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdfflat.o -MD -MP -MF $(DEPDIR)/ragel-cdfflat.Tpo -c -o ragel-cdfflat.o `test -f 'cdfflat.cpp' || echo '$(srcdir)/'`cdfflat.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdfflat.Tpo $(DEPDIR)/ragel-cdfflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdfflat.cpp' object='ragel-cdfflat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdfflat.o `test -f 'cdfflat.cpp' || echo '$(srcdir)/'`cdfflat.cpp
+
+ragel-cdfflat.obj: cdfflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdfflat.obj -MD -MP -MF $(DEPDIR)/ragel-cdfflat.Tpo -c -o ragel-cdfflat.obj `if test -f 'cdfflat.cpp'; then $(CYGPATH_W) 'cdfflat.cpp'; else $(CYGPATH_W) '$(srcdir)/cdfflat.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdfflat.Tpo $(DEPDIR)/ragel-cdfflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdfflat.cpp' object='ragel-cdfflat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdfflat.obj `if test -f 'cdfflat.cpp'; then $(CYGPATH_W) 'cdfflat.cpp'; else $(CYGPATH_W) '$(srcdir)/cdfflat.cpp'; fi`
+
+ragel-cdgoto.o: cdgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdgoto.o -MD -MP -MF $(DEPDIR)/ragel-cdgoto.Tpo -c -o ragel-cdgoto.o `test -f 'cdgoto.cpp' || echo '$(srcdir)/'`cdgoto.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdgoto.Tpo $(DEPDIR)/ragel-cdgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdgoto.cpp' object='ragel-cdgoto.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdgoto.o `test -f 'cdgoto.cpp' || echo '$(srcdir)/'`cdgoto.cpp
+
+ragel-cdgoto.obj: cdgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdgoto.obj -MD -MP -MF $(DEPDIR)/ragel-cdgoto.Tpo -c -o ragel-cdgoto.obj `if test -f 'cdgoto.cpp'; then $(CYGPATH_W) 'cdgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/cdgoto.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdgoto.Tpo $(DEPDIR)/ragel-cdgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdgoto.cpp' object='ragel-cdgoto.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdgoto.obj `if test -f 'cdgoto.cpp'; then $(CYGPATH_W) 'cdgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/cdgoto.cpp'; fi`
+
+ragel-cdfgoto.o: cdfgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdfgoto.o -MD -MP -MF $(DEPDIR)/ragel-cdfgoto.Tpo -c -o ragel-cdfgoto.o `test -f 'cdfgoto.cpp' || echo '$(srcdir)/'`cdfgoto.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdfgoto.Tpo $(DEPDIR)/ragel-cdfgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdfgoto.cpp' object='ragel-cdfgoto.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdfgoto.o `test -f 'cdfgoto.cpp' || echo '$(srcdir)/'`cdfgoto.cpp
+
+ragel-cdfgoto.obj: cdfgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdfgoto.obj -MD -MP -MF $(DEPDIR)/ragel-cdfgoto.Tpo -c -o ragel-cdfgoto.obj `if test -f 'cdfgoto.cpp'; then $(CYGPATH_W) 'cdfgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/cdfgoto.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdfgoto.Tpo $(DEPDIR)/ragel-cdfgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdfgoto.cpp' object='ragel-cdfgoto.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdfgoto.obj `if test -f 'cdfgoto.cpp'; then $(CYGPATH_W) 'cdfgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/cdfgoto.cpp'; fi`
+
+ragel-cdipgoto.o: cdipgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdipgoto.o -MD -MP -MF $(DEPDIR)/ragel-cdipgoto.Tpo -c -o ragel-cdipgoto.o `test -f 'cdipgoto.cpp' || echo '$(srcdir)/'`cdipgoto.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdipgoto.Tpo $(DEPDIR)/ragel-cdipgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdipgoto.cpp' object='ragel-cdipgoto.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdipgoto.o `test -f 'cdipgoto.cpp' || echo '$(srcdir)/'`cdipgoto.cpp
+
+ragel-cdipgoto.obj: cdipgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdipgoto.obj -MD -MP -MF $(DEPDIR)/ragel-cdipgoto.Tpo -c -o ragel-cdipgoto.obj `if test -f 'cdipgoto.cpp'; then $(CYGPATH_W) 'cdipgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/cdipgoto.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdipgoto.Tpo $(DEPDIR)/ragel-cdipgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdipgoto.cpp' object='ragel-cdipgoto.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdipgoto.obj `if test -f 'cdipgoto.cpp'; then $(CYGPATH_W) 'cdipgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/cdipgoto.cpp'; fi`
+
+ragel-cdsplit.o: cdsplit.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdsplit.o -MD -MP -MF $(DEPDIR)/ragel-cdsplit.Tpo -c -o ragel-cdsplit.o `test -f 'cdsplit.cpp' || echo '$(srcdir)/'`cdsplit.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdsplit.Tpo $(DEPDIR)/ragel-cdsplit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdsplit.cpp' object='ragel-cdsplit.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdsplit.o `test -f 'cdsplit.cpp' || echo '$(srcdir)/'`cdsplit.cpp
+
+ragel-cdsplit.obj: cdsplit.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cdsplit.obj -MD -MP -MF $(DEPDIR)/ragel-cdsplit.Tpo -c -o ragel-cdsplit.obj `if test -f 'cdsplit.cpp'; then $(CYGPATH_W) 'cdsplit.cpp'; else $(CYGPATH_W) '$(srcdir)/cdsplit.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cdsplit.Tpo $(DEPDIR)/ragel-cdsplit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cdsplit.cpp' object='ragel-cdsplit.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cdsplit.obj `if test -f 'cdsplit.cpp'; then $(CYGPATH_W) 'cdsplit.cpp'; else $(CYGPATH_W) '$(srcdir)/cdsplit.cpp'; fi`
+
+ragel-javacodegen.o: javacodegen.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-javacodegen.o -MD -MP -MF $(DEPDIR)/ragel-javacodegen.Tpo -c -o ragel-javacodegen.o `test -f 'javacodegen.cpp' || echo '$(srcdir)/'`javacodegen.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-javacodegen.Tpo $(DEPDIR)/ragel-javacodegen.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='javacodegen.cpp' object='ragel-javacodegen.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-javacodegen.o `test -f 'javacodegen.cpp' || echo '$(srcdir)/'`javacodegen.cpp
+
+ragel-javacodegen.obj: javacodegen.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-javacodegen.obj -MD -MP -MF $(DEPDIR)/ragel-javacodegen.Tpo -c -o ragel-javacodegen.obj `if test -f 'javacodegen.cpp'; then $(CYGPATH_W) 'javacodegen.cpp'; else $(CYGPATH_W) '$(srcdir)/javacodegen.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-javacodegen.Tpo $(DEPDIR)/ragel-javacodegen.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='javacodegen.cpp' object='ragel-javacodegen.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-javacodegen.obj `if test -f 'javacodegen.cpp'; then $(CYGPATH_W) 'javacodegen.cpp'; else $(CYGPATH_W) '$(srcdir)/javacodegen.cpp'; fi`
+
+ragel-rubycodegen.o: rubycodegen.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-rubycodegen.o -MD -MP -MF $(DEPDIR)/ragel-rubycodegen.Tpo -c -o ragel-rubycodegen.o `test -f 'rubycodegen.cpp' || echo '$(srcdir)/'`rubycodegen.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-rubycodegen.Tpo $(DEPDIR)/ragel-rubycodegen.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rubycodegen.cpp' object='ragel-rubycodegen.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-rubycodegen.o `test -f 'rubycodegen.cpp' || echo '$(srcdir)/'`rubycodegen.cpp
+
+ragel-rubycodegen.obj: rubycodegen.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-rubycodegen.obj -MD -MP -MF $(DEPDIR)/ragel-rubycodegen.Tpo -c -o ragel-rubycodegen.obj `if test -f 'rubycodegen.cpp'; then $(CYGPATH_W) 'rubycodegen.cpp'; else $(CYGPATH_W) '$(srcdir)/rubycodegen.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-rubycodegen.Tpo $(DEPDIR)/ragel-rubycodegen.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rubycodegen.cpp' object='ragel-rubycodegen.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-rubycodegen.obj `if test -f 'rubycodegen.cpp'; then $(CYGPATH_W) 'rubycodegen.cpp'; else $(CYGPATH_W) '$(srcdir)/rubycodegen.cpp'; fi`
+
+ragel-rubytable.o: rubytable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-rubytable.o -MD -MP -MF $(DEPDIR)/ragel-rubytable.Tpo -c -o ragel-rubytable.o `test -f 'rubytable.cpp' || echo '$(srcdir)/'`rubytable.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-rubytable.Tpo $(DEPDIR)/ragel-rubytable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rubytable.cpp' object='ragel-rubytable.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-rubytable.o `test -f 'rubytable.cpp' || echo '$(srcdir)/'`rubytable.cpp
+
+ragel-rubytable.obj: rubytable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-rubytable.obj -MD -MP -MF $(DEPDIR)/ragel-rubytable.Tpo -c -o ragel-rubytable.obj `if test -f 'rubytable.cpp'; then $(CYGPATH_W) 'rubytable.cpp'; else $(CYGPATH_W) '$(srcdir)/rubytable.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-rubytable.Tpo $(DEPDIR)/ragel-rubytable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rubytable.cpp' object='ragel-rubytable.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-rubytable.obj `if test -f 'rubytable.cpp'; then $(CYGPATH_W) 'rubytable.cpp'; else $(CYGPATH_W) '$(srcdir)/rubytable.cpp'; fi`
+
+ragel-rubyftable.o: rubyftable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-rubyftable.o -MD -MP -MF $(DEPDIR)/ragel-rubyftable.Tpo -c -o ragel-rubyftable.o `test -f 'rubyftable.cpp' || echo '$(srcdir)/'`rubyftable.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-rubyftable.Tpo $(DEPDIR)/ragel-rubyftable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rubyftable.cpp' object='ragel-rubyftable.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-rubyftable.o `test -f 'rubyftable.cpp' || echo '$(srcdir)/'`rubyftable.cpp
+
+ragel-rubyftable.obj: rubyftable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-rubyftable.obj -MD -MP -MF $(DEPDIR)/ragel-rubyftable.Tpo -c -o ragel-rubyftable.obj `if test -f 'rubyftable.cpp'; then $(CYGPATH_W) 'rubyftable.cpp'; else $(CYGPATH_W) '$(srcdir)/rubyftable.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-rubyftable.Tpo $(DEPDIR)/ragel-rubyftable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rubyftable.cpp' object='ragel-rubyftable.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-rubyftable.obj `if test -f 'rubyftable.cpp'; then $(CYGPATH_W) 'rubyftable.cpp'; else $(CYGPATH_W) '$(srcdir)/rubyftable.cpp'; fi`
+
+ragel-rubyflat.o: rubyflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-rubyflat.o -MD -MP -MF $(DEPDIR)/ragel-rubyflat.Tpo -c -o ragel-rubyflat.o `test -f 'rubyflat.cpp' || echo '$(srcdir)/'`rubyflat.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-rubyflat.Tpo $(DEPDIR)/ragel-rubyflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rubyflat.cpp' object='ragel-rubyflat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-rubyflat.o `test -f 'rubyflat.cpp' || echo '$(srcdir)/'`rubyflat.cpp
+
+ragel-rubyflat.obj: rubyflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-rubyflat.obj -MD -MP -MF $(DEPDIR)/ragel-rubyflat.Tpo -c -o ragel-rubyflat.obj `if test -f 'rubyflat.cpp'; then $(CYGPATH_W) 'rubyflat.cpp'; else $(CYGPATH_W) '$(srcdir)/rubyflat.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-rubyflat.Tpo $(DEPDIR)/ragel-rubyflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rubyflat.cpp' object='ragel-rubyflat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-rubyflat.obj `if test -f 'rubyflat.cpp'; then $(CYGPATH_W) 'rubyflat.cpp'; else $(CYGPATH_W) '$(srcdir)/rubyflat.cpp'; fi`
+
+ragel-rubyfflat.o: rubyfflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-rubyfflat.o -MD -MP -MF $(DEPDIR)/ragel-rubyfflat.Tpo -c -o ragel-rubyfflat.o `test -f 'rubyfflat.cpp' || echo '$(srcdir)/'`rubyfflat.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-rubyfflat.Tpo $(DEPDIR)/ragel-rubyfflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rubyfflat.cpp' object='ragel-rubyfflat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-rubyfflat.o `test -f 'rubyfflat.cpp' || echo '$(srcdir)/'`rubyfflat.cpp
+
+ragel-rubyfflat.obj: rubyfflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-rubyfflat.obj -MD -MP -MF $(DEPDIR)/ragel-rubyfflat.Tpo -c -o ragel-rubyfflat.obj `if test -f 'rubyfflat.cpp'; then $(CYGPATH_W) 'rubyfflat.cpp'; else $(CYGPATH_W) '$(srcdir)/rubyfflat.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-rubyfflat.Tpo $(DEPDIR)/ragel-rubyfflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rubyfflat.cpp' object='ragel-rubyfflat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-rubyfflat.obj `if test -f 'rubyfflat.cpp'; then $(CYGPATH_W) 'rubyfflat.cpp'; else $(CYGPATH_W) '$(srcdir)/rubyfflat.cpp'; fi`
+
+ragel-rbxgoto.o: rbxgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-rbxgoto.o -MD -MP -MF $(DEPDIR)/ragel-rbxgoto.Tpo -c -o ragel-rbxgoto.o `test -f 'rbxgoto.cpp' || echo '$(srcdir)/'`rbxgoto.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-rbxgoto.Tpo $(DEPDIR)/ragel-rbxgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rbxgoto.cpp' object='ragel-rbxgoto.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-rbxgoto.o `test -f 'rbxgoto.cpp' || echo '$(srcdir)/'`rbxgoto.cpp
+
+ragel-rbxgoto.obj: rbxgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-rbxgoto.obj -MD -MP -MF $(DEPDIR)/ragel-rbxgoto.Tpo -c -o ragel-rbxgoto.obj `if test -f 'rbxgoto.cpp'; then $(CYGPATH_W) 'rbxgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/rbxgoto.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-rbxgoto.Tpo $(DEPDIR)/ragel-rbxgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='rbxgoto.cpp' object='ragel-rbxgoto.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-rbxgoto.obj `if test -f 'rbxgoto.cpp'; then $(CYGPATH_W) 'rbxgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/rbxgoto.cpp'; fi`
+
+ragel-cscodegen.o: cscodegen.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cscodegen.o -MD -MP -MF $(DEPDIR)/ragel-cscodegen.Tpo -c -o ragel-cscodegen.o `test -f 'cscodegen.cpp' || echo '$(srcdir)/'`cscodegen.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cscodegen.Tpo $(DEPDIR)/ragel-cscodegen.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cscodegen.cpp' object='ragel-cscodegen.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cscodegen.o `test -f 'cscodegen.cpp' || echo '$(srcdir)/'`cscodegen.cpp
+
+ragel-cscodegen.obj: cscodegen.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cscodegen.obj -MD -MP -MF $(DEPDIR)/ragel-cscodegen.Tpo -c -o ragel-cscodegen.obj `if test -f 'cscodegen.cpp'; then $(CYGPATH_W) 'cscodegen.cpp'; else $(CYGPATH_W) '$(srcdir)/cscodegen.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cscodegen.Tpo $(DEPDIR)/ragel-cscodegen.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cscodegen.cpp' object='ragel-cscodegen.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cscodegen.obj `if test -f 'cscodegen.cpp'; then $(CYGPATH_W) 'cscodegen.cpp'; else $(CYGPATH_W) '$(srcdir)/cscodegen.cpp'; fi`
+
+ragel-cstable.o: cstable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cstable.o -MD -MP -MF $(DEPDIR)/ragel-cstable.Tpo -c -o ragel-cstable.o `test -f 'cstable.cpp' || echo '$(srcdir)/'`cstable.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cstable.Tpo $(DEPDIR)/ragel-cstable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cstable.cpp' object='ragel-cstable.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cstable.o `test -f 'cstable.cpp' || echo '$(srcdir)/'`cstable.cpp
+
+ragel-cstable.obj: cstable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cstable.obj -MD -MP -MF $(DEPDIR)/ragel-cstable.Tpo -c -o ragel-cstable.obj `if test -f 'cstable.cpp'; then $(CYGPATH_W) 'cstable.cpp'; else $(CYGPATH_W) '$(srcdir)/cstable.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cstable.Tpo $(DEPDIR)/ragel-cstable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cstable.cpp' object='ragel-cstable.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cstable.obj `if test -f 'cstable.cpp'; then $(CYGPATH_W) 'cstable.cpp'; else $(CYGPATH_W) '$(srcdir)/cstable.cpp'; fi`
+
+ragel-csftable.o: csftable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-csftable.o -MD -MP -MF $(DEPDIR)/ragel-csftable.Tpo -c -o ragel-csftable.o `test -f 'csftable.cpp' || echo '$(srcdir)/'`csftable.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-csftable.Tpo $(DEPDIR)/ragel-csftable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='csftable.cpp' object='ragel-csftable.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-csftable.o `test -f 'csftable.cpp' || echo '$(srcdir)/'`csftable.cpp
+
+ragel-csftable.obj: csftable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-csftable.obj -MD -MP -MF $(DEPDIR)/ragel-csftable.Tpo -c -o ragel-csftable.obj `if test -f 'csftable.cpp'; then $(CYGPATH_W) 'csftable.cpp'; else $(CYGPATH_W) '$(srcdir)/csftable.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-csftable.Tpo $(DEPDIR)/ragel-csftable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='csftable.cpp' object='ragel-csftable.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-csftable.obj `if test -f 'csftable.cpp'; then $(CYGPATH_W) 'csftable.cpp'; else $(CYGPATH_W) '$(srcdir)/csftable.cpp'; fi`
+
+ragel-csflat.o: csflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-csflat.o -MD -MP -MF $(DEPDIR)/ragel-csflat.Tpo -c -o ragel-csflat.o `test -f 'csflat.cpp' || echo '$(srcdir)/'`csflat.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-csflat.Tpo $(DEPDIR)/ragel-csflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='csflat.cpp' object='ragel-csflat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-csflat.o `test -f 'csflat.cpp' || echo '$(srcdir)/'`csflat.cpp
+
+ragel-csflat.obj: csflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-csflat.obj -MD -MP -MF $(DEPDIR)/ragel-csflat.Tpo -c -o ragel-csflat.obj `if test -f 'csflat.cpp'; then $(CYGPATH_W) 'csflat.cpp'; else $(CYGPATH_W) '$(srcdir)/csflat.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-csflat.Tpo $(DEPDIR)/ragel-csflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='csflat.cpp' object='ragel-csflat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-csflat.obj `if test -f 'csflat.cpp'; then $(CYGPATH_W) 'csflat.cpp'; else $(CYGPATH_W) '$(srcdir)/csflat.cpp'; fi`
+
+ragel-csfflat.o: csfflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-csfflat.o -MD -MP -MF $(DEPDIR)/ragel-csfflat.Tpo -c -o ragel-csfflat.o `test -f 'csfflat.cpp' || echo '$(srcdir)/'`csfflat.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-csfflat.Tpo $(DEPDIR)/ragel-csfflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='csfflat.cpp' object='ragel-csfflat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-csfflat.o `test -f 'csfflat.cpp' || echo '$(srcdir)/'`csfflat.cpp
+
+ragel-csfflat.obj: csfflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-csfflat.obj -MD -MP -MF $(DEPDIR)/ragel-csfflat.Tpo -c -o ragel-csfflat.obj `if test -f 'csfflat.cpp'; then $(CYGPATH_W) 'csfflat.cpp'; else $(CYGPATH_W) '$(srcdir)/csfflat.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-csfflat.Tpo $(DEPDIR)/ragel-csfflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='csfflat.cpp' object='ragel-csfflat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-csfflat.obj `if test -f 'csfflat.cpp'; then $(CYGPATH_W) 'csfflat.cpp'; else $(CYGPATH_W) '$(srcdir)/csfflat.cpp'; fi`
+
+ragel-csgoto.o: csgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-csgoto.o -MD -MP -MF $(DEPDIR)/ragel-csgoto.Tpo -c -o ragel-csgoto.o `test -f 'csgoto.cpp' || echo '$(srcdir)/'`csgoto.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-csgoto.Tpo $(DEPDIR)/ragel-csgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='csgoto.cpp' object='ragel-csgoto.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-csgoto.o `test -f 'csgoto.cpp' || echo '$(srcdir)/'`csgoto.cpp
+
+ragel-csgoto.obj: csgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-csgoto.obj -MD -MP -MF $(DEPDIR)/ragel-csgoto.Tpo -c -o ragel-csgoto.obj `if test -f 'csgoto.cpp'; then $(CYGPATH_W) 'csgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/csgoto.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-csgoto.Tpo $(DEPDIR)/ragel-csgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='csgoto.cpp' object='ragel-csgoto.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-csgoto.obj `if test -f 'csgoto.cpp'; then $(CYGPATH_W) 'csgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/csgoto.cpp'; fi`
+
+ragel-csfgoto.o: csfgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-csfgoto.o -MD -MP -MF $(DEPDIR)/ragel-csfgoto.Tpo -c -o ragel-csfgoto.o `test -f 'csfgoto.cpp' || echo '$(srcdir)/'`csfgoto.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-csfgoto.Tpo $(DEPDIR)/ragel-csfgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='csfgoto.cpp' object='ragel-csfgoto.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-csfgoto.o `test -f 'csfgoto.cpp' || echo '$(srcdir)/'`csfgoto.cpp
+
+ragel-csfgoto.obj: csfgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-csfgoto.obj -MD -MP -MF $(DEPDIR)/ragel-csfgoto.Tpo -c -o ragel-csfgoto.obj `if test -f 'csfgoto.cpp'; then $(CYGPATH_W) 'csfgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/csfgoto.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-csfgoto.Tpo $(DEPDIR)/ragel-csfgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='csfgoto.cpp' object='ragel-csfgoto.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-csfgoto.obj `if test -f 'csfgoto.cpp'; then $(CYGPATH_W) 'csfgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/csfgoto.cpp'; fi`
+
+ragel-csipgoto.o: csipgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-csipgoto.o -MD -MP -MF $(DEPDIR)/ragel-csipgoto.Tpo -c -o ragel-csipgoto.o `test -f 'csipgoto.cpp' || echo '$(srcdir)/'`csipgoto.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-csipgoto.Tpo $(DEPDIR)/ragel-csipgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='csipgoto.cpp' object='ragel-csipgoto.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-csipgoto.o `test -f 'csipgoto.cpp' || echo '$(srcdir)/'`csipgoto.cpp
+
+ragel-csipgoto.obj: csipgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-csipgoto.obj -MD -MP -MF $(DEPDIR)/ragel-csipgoto.Tpo -c -o ragel-csipgoto.obj `if test -f 'csipgoto.cpp'; then $(CYGPATH_W) 'csipgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/csipgoto.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-csipgoto.Tpo $(DEPDIR)/ragel-csipgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='csipgoto.cpp' object='ragel-csipgoto.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-csipgoto.obj `if test -f 'csipgoto.cpp'; then $(CYGPATH_W) 'csipgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/csipgoto.cpp'; fi`
+
+ragel-cssplit.o: cssplit.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cssplit.o -MD -MP -MF $(DEPDIR)/ragel-cssplit.Tpo -c -o ragel-cssplit.o `test -f 'cssplit.cpp' || echo '$(srcdir)/'`cssplit.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cssplit.Tpo $(DEPDIR)/ragel-cssplit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cssplit.cpp' object='ragel-cssplit.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cssplit.o `test -f 'cssplit.cpp' || echo '$(srcdir)/'`cssplit.cpp
+
+ragel-cssplit.obj: cssplit.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-cssplit.obj -MD -MP -MF $(DEPDIR)/ragel-cssplit.Tpo -c -o ragel-cssplit.obj `if test -f 'cssplit.cpp'; then $(CYGPATH_W) 'cssplit.cpp'; else $(CYGPATH_W) '$(srcdir)/cssplit.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-cssplit.Tpo $(DEPDIR)/ragel-cssplit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='cssplit.cpp' object='ragel-cssplit.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-cssplit.obj `if test -f 'cssplit.cpp'; then $(CYGPATH_W) 'cssplit.cpp'; else $(CYGPATH_W) '$(srcdir)/cssplit.cpp'; fi`
+
+ragel-dotcodegen.o: dotcodegen.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-dotcodegen.o -MD -MP -MF $(DEPDIR)/ragel-dotcodegen.Tpo -c -o ragel-dotcodegen.o `test -f 'dotcodegen.cpp' || echo '$(srcdir)/'`dotcodegen.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-dotcodegen.Tpo $(DEPDIR)/ragel-dotcodegen.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='dotcodegen.cpp' object='ragel-dotcodegen.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-dotcodegen.o `test -f 'dotcodegen.cpp' || echo '$(srcdir)/'`dotcodegen.cpp
+
+ragel-dotcodegen.obj: dotcodegen.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-dotcodegen.obj -MD -MP -MF $(DEPDIR)/ragel-dotcodegen.Tpo -c -o ragel-dotcodegen.obj `if test -f 'dotcodegen.cpp'; then $(CYGPATH_W) 'dotcodegen.cpp'; else $(CYGPATH_W) '$(srcdir)/dotcodegen.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-dotcodegen.Tpo $(DEPDIR)/ragel-dotcodegen.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='dotcodegen.cpp' object='ragel-dotcodegen.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-dotcodegen.obj `if test -f 'dotcodegen.cpp'; then $(CYGPATH_W) 'dotcodegen.cpp'; else $(CYGPATH_W) '$(srcdir)/dotcodegen.cpp'; fi`
+
+ragel-xmlcodegen.o: xmlcodegen.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-xmlcodegen.o -MD -MP -MF $(DEPDIR)/ragel-xmlcodegen.Tpo -c -o ragel-xmlcodegen.o `test -f 'xmlcodegen.cpp' || echo '$(srcdir)/'`xmlcodegen.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-xmlcodegen.Tpo $(DEPDIR)/ragel-xmlcodegen.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='xmlcodegen.cpp' object='ragel-xmlcodegen.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-xmlcodegen.o `test -f 'xmlcodegen.cpp' || echo '$(srcdir)/'`xmlcodegen.cpp
+
+ragel-xmlcodegen.obj: xmlcodegen.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-xmlcodegen.obj -MD -MP -MF $(DEPDIR)/ragel-xmlcodegen.Tpo -c -o ragel-xmlcodegen.obj `if test -f 'xmlcodegen.cpp'; then $(CYGPATH_W) 'xmlcodegen.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlcodegen.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-xmlcodegen.Tpo $(DEPDIR)/ragel-xmlcodegen.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='xmlcodegen.cpp' object='ragel-xmlcodegen.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-xmlcodegen.obj `if test -f 'xmlcodegen.cpp'; then $(CYGPATH_W) 'xmlcodegen.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlcodegen.cpp'; fi`
+
+ragel-gocodegen.o: gocodegen.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-gocodegen.o -MD -MP -MF $(DEPDIR)/ragel-gocodegen.Tpo -c -o ragel-gocodegen.o `test -f 'gocodegen.cpp' || echo '$(srcdir)/'`gocodegen.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-gocodegen.Tpo $(DEPDIR)/ragel-gocodegen.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gocodegen.cpp' object='ragel-gocodegen.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-gocodegen.o `test -f 'gocodegen.cpp' || echo '$(srcdir)/'`gocodegen.cpp
+
+ragel-gocodegen.obj: gocodegen.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-gocodegen.obj -MD -MP -MF $(DEPDIR)/ragel-gocodegen.Tpo -c -o ragel-gocodegen.obj `if test -f 'gocodegen.cpp'; then $(CYGPATH_W) 'gocodegen.cpp'; else $(CYGPATH_W) '$(srcdir)/gocodegen.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-gocodegen.Tpo $(DEPDIR)/ragel-gocodegen.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gocodegen.cpp' object='ragel-gocodegen.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-gocodegen.obj `if test -f 'gocodegen.cpp'; then $(CYGPATH_W) 'gocodegen.cpp'; else $(CYGPATH_W) '$(srcdir)/gocodegen.cpp'; fi`
+
+ragel-gotable.o: gotable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-gotable.o -MD -MP -MF $(DEPDIR)/ragel-gotable.Tpo -c -o ragel-gotable.o `test -f 'gotable.cpp' || echo '$(srcdir)/'`gotable.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-gotable.Tpo $(DEPDIR)/ragel-gotable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gotable.cpp' object='ragel-gotable.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-gotable.o `test -f 'gotable.cpp' || echo '$(srcdir)/'`gotable.cpp
+
+ragel-gotable.obj: gotable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-gotable.obj -MD -MP -MF $(DEPDIR)/ragel-gotable.Tpo -c -o ragel-gotable.obj `if test -f 'gotable.cpp'; then $(CYGPATH_W) 'gotable.cpp'; else $(CYGPATH_W) '$(srcdir)/gotable.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-gotable.Tpo $(DEPDIR)/ragel-gotable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gotable.cpp' object='ragel-gotable.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-gotable.obj `if test -f 'gotable.cpp'; then $(CYGPATH_W) 'gotable.cpp'; else $(CYGPATH_W) '$(srcdir)/gotable.cpp'; fi`
+
+ragel-goftable.o: goftable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-goftable.o -MD -MP -MF $(DEPDIR)/ragel-goftable.Tpo -c -o ragel-goftable.o `test -f 'goftable.cpp' || echo '$(srcdir)/'`goftable.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-goftable.Tpo $(DEPDIR)/ragel-goftable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='goftable.cpp' object='ragel-goftable.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-goftable.o `test -f 'goftable.cpp' || echo '$(srcdir)/'`goftable.cpp
+
+ragel-goftable.obj: goftable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-goftable.obj -MD -MP -MF $(DEPDIR)/ragel-goftable.Tpo -c -o ragel-goftable.obj `if test -f 'goftable.cpp'; then $(CYGPATH_W) 'goftable.cpp'; else $(CYGPATH_W) '$(srcdir)/goftable.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-goftable.Tpo $(DEPDIR)/ragel-goftable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='goftable.cpp' object='ragel-goftable.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-goftable.obj `if test -f 'goftable.cpp'; then $(CYGPATH_W) 'goftable.cpp'; else $(CYGPATH_W) '$(srcdir)/goftable.cpp'; fi`
+
+ragel-goflat.o: goflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-goflat.o -MD -MP -MF $(DEPDIR)/ragel-goflat.Tpo -c -o ragel-goflat.o `test -f 'goflat.cpp' || echo '$(srcdir)/'`goflat.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-goflat.Tpo $(DEPDIR)/ragel-goflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='goflat.cpp' object='ragel-goflat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-goflat.o `test -f 'goflat.cpp' || echo '$(srcdir)/'`goflat.cpp
+
+ragel-goflat.obj: goflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-goflat.obj -MD -MP -MF $(DEPDIR)/ragel-goflat.Tpo -c -o ragel-goflat.obj `if test -f 'goflat.cpp'; then $(CYGPATH_W) 'goflat.cpp'; else $(CYGPATH_W) '$(srcdir)/goflat.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-goflat.Tpo $(DEPDIR)/ragel-goflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='goflat.cpp' object='ragel-goflat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-goflat.obj `if test -f 'goflat.cpp'; then $(CYGPATH_W) 'goflat.cpp'; else $(CYGPATH_W) '$(srcdir)/goflat.cpp'; fi`
+
+ragel-gofflat.o: gofflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-gofflat.o -MD -MP -MF $(DEPDIR)/ragel-gofflat.Tpo -c -o ragel-gofflat.o `test -f 'gofflat.cpp' || echo '$(srcdir)/'`gofflat.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-gofflat.Tpo $(DEPDIR)/ragel-gofflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gofflat.cpp' object='ragel-gofflat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-gofflat.o `test -f 'gofflat.cpp' || echo '$(srcdir)/'`gofflat.cpp
+
+ragel-gofflat.obj: gofflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-gofflat.obj -MD -MP -MF $(DEPDIR)/ragel-gofflat.Tpo -c -o ragel-gofflat.obj `if test -f 'gofflat.cpp'; then $(CYGPATH_W) 'gofflat.cpp'; else $(CYGPATH_W) '$(srcdir)/gofflat.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-gofflat.Tpo $(DEPDIR)/ragel-gofflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gofflat.cpp' object='ragel-gofflat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-gofflat.obj `if test -f 'gofflat.cpp'; then $(CYGPATH_W) 'gofflat.cpp'; else $(CYGPATH_W) '$(srcdir)/gofflat.cpp'; fi`
+
+ragel-gogoto.o: gogoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-gogoto.o -MD -MP -MF $(DEPDIR)/ragel-gogoto.Tpo -c -o ragel-gogoto.o `test -f 'gogoto.cpp' || echo '$(srcdir)/'`gogoto.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-gogoto.Tpo $(DEPDIR)/ragel-gogoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gogoto.cpp' object='ragel-gogoto.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-gogoto.o `test -f 'gogoto.cpp' || echo '$(srcdir)/'`gogoto.cpp
+
+ragel-gogoto.obj: gogoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-gogoto.obj -MD -MP -MF $(DEPDIR)/ragel-gogoto.Tpo -c -o ragel-gogoto.obj `if test -f 'gogoto.cpp'; then $(CYGPATH_W) 'gogoto.cpp'; else $(CYGPATH_W) '$(srcdir)/gogoto.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-gogoto.Tpo $(DEPDIR)/ragel-gogoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gogoto.cpp' object='ragel-gogoto.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-gogoto.obj `if test -f 'gogoto.cpp'; then $(CYGPATH_W) 'gogoto.cpp'; else $(CYGPATH_W) '$(srcdir)/gogoto.cpp'; fi`
+
+ragel-gofgoto.o: gofgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-gofgoto.o -MD -MP -MF $(DEPDIR)/ragel-gofgoto.Tpo -c -o ragel-gofgoto.o `test -f 'gofgoto.cpp' || echo '$(srcdir)/'`gofgoto.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-gofgoto.Tpo $(DEPDIR)/ragel-gofgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gofgoto.cpp' object='ragel-gofgoto.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-gofgoto.o `test -f 'gofgoto.cpp' || echo '$(srcdir)/'`gofgoto.cpp
+
+ragel-gofgoto.obj: gofgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-gofgoto.obj -MD -MP -MF $(DEPDIR)/ragel-gofgoto.Tpo -c -o ragel-gofgoto.obj `if test -f 'gofgoto.cpp'; then $(CYGPATH_W) 'gofgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/gofgoto.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-gofgoto.Tpo $(DEPDIR)/ragel-gofgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gofgoto.cpp' object='ragel-gofgoto.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-gofgoto.obj `if test -f 'gofgoto.cpp'; then $(CYGPATH_W) 'gofgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/gofgoto.cpp'; fi`
+
+ragel-goipgoto.o: goipgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-goipgoto.o -MD -MP -MF $(DEPDIR)/ragel-goipgoto.Tpo -c -o ragel-goipgoto.o `test -f 'goipgoto.cpp' || echo '$(srcdir)/'`goipgoto.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-goipgoto.Tpo $(DEPDIR)/ragel-goipgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='goipgoto.cpp' object='ragel-goipgoto.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-goipgoto.o `test -f 'goipgoto.cpp' || echo '$(srcdir)/'`goipgoto.cpp
+
+ragel-goipgoto.obj: goipgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-goipgoto.obj -MD -MP -MF $(DEPDIR)/ragel-goipgoto.Tpo -c -o ragel-goipgoto.obj `if test -f 'goipgoto.cpp'; then $(CYGPATH_W) 'goipgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/goipgoto.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-goipgoto.Tpo $(DEPDIR)/ragel-goipgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='goipgoto.cpp' object='ragel-goipgoto.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-goipgoto.obj `if test -f 'goipgoto.cpp'; then $(CYGPATH_W) 'goipgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/goipgoto.cpp'; fi`
+
+ragel-gotablish.o: gotablish.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-gotablish.o -MD -MP -MF $(DEPDIR)/ragel-gotablish.Tpo -c -o ragel-gotablish.o `test -f 'gotablish.cpp' || echo '$(srcdir)/'`gotablish.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-gotablish.Tpo $(DEPDIR)/ragel-gotablish.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gotablish.cpp' object='ragel-gotablish.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-gotablish.o `test -f 'gotablish.cpp' || echo '$(srcdir)/'`gotablish.cpp
+
+ragel-gotablish.obj: gotablish.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-gotablish.obj -MD -MP -MF $(DEPDIR)/ragel-gotablish.Tpo -c -o ragel-gotablish.obj `if test -f 'gotablish.cpp'; then $(CYGPATH_W) 'gotablish.cpp'; else $(CYGPATH_W) '$(srcdir)/gotablish.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-gotablish.Tpo $(DEPDIR)/ragel-gotablish.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gotablish.cpp' object='ragel-gotablish.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-gotablish.obj `if test -f 'gotablish.cpp'; then $(CYGPATH_W) 'gotablish.cpp'; else $(CYGPATH_W) '$(srcdir)/gotablish.cpp'; fi`
+
+ragel-mlcodegen.o: mlcodegen.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-mlcodegen.o -MD -MP -MF $(DEPDIR)/ragel-mlcodegen.Tpo -c -o ragel-mlcodegen.o `test -f 'mlcodegen.cpp' || echo '$(srcdir)/'`mlcodegen.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-mlcodegen.Tpo $(DEPDIR)/ragel-mlcodegen.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mlcodegen.cpp' object='ragel-mlcodegen.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-mlcodegen.o `test -f 'mlcodegen.cpp' || echo '$(srcdir)/'`mlcodegen.cpp
+
+ragel-mlcodegen.obj: mlcodegen.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-mlcodegen.obj -MD -MP -MF $(DEPDIR)/ragel-mlcodegen.Tpo -c -o ragel-mlcodegen.obj `if test -f 'mlcodegen.cpp'; then $(CYGPATH_W) 'mlcodegen.cpp'; else $(CYGPATH_W) '$(srcdir)/mlcodegen.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-mlcodegen.Tpo $(DEPDIR)/ragel-mlcodegen.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mlcodegen.cpp' object='ragel-mlcodegen.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-mlcodegen.obj `if test -f 'mlcodegen.cpp'; then $(CYGPATH_W) 'mlcodegen.cpp'; else $(CYGPATH_W) '$(srcdir)/mlcodegen.cpp'; fi`
+
+ragel-mltable.o: mltable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-mltable.o -MD -MP -MF $(DEPDIR)/ragel-mltable.Tpo -c -o ragel-mltable.o `test -f 'mltable.cpp' || echo '$(srcdir)/'`mltable.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-mltable.Tpo $(DEPDIR)/ragel-mltable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mltable.cpp' object='ragel-mltable.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-mltable.o `test -f 'mltable.cpp' || echo '$(srcdir)/'`mltable.cpp
+
+ragel-mltable.obj: mltable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-mltable.obj -MD -MP -MF $(DEPDIR)/ragel-mltable.Tpo -c -o ragel-mltable.obj `if test -f 'mltable.cpp'; then $(CYGPATH_W) 'mltable.cpp'; else $(CYGPATH_W) '$(srcdir)/mltable.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-mltable.Tpo $(DEPDIR)/ragel-mltable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mltable.cpp' object='ragel-mltable.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-mltable.obj `if test -f 'mltable.cpp'; then $(CYGPATH_W) 'mltable.cpp'; else $(CYGPATH_W) '$(srcdir)/mltable.cpp'; fi`
+
+ragel-mlftable.o: mlftable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-mlftable.o -MD -MP -MF $(DEPDIR)/ragel-mlftable.Tpo -c -o ragel-mlftable.o `test -f 'mlftable.cpp' || echo '$(srcdir)/'`mlftable.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-mlftable.Tpo $(DEPDIR)/ragel-mlftable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mlftable.cpp' object='ragel-mlftable.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-mlftable.o `test -f 'mlftable.cpp' || echo '$(srcdir)/'`mlftable.cpp
+
+ragel-mlftable.obj: mlftable.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-mlftable.obj -MD -MP -MF $(DEPDIR)/ragel-mlftable.Tpo -c -o ragel-mlftable.obj `if test -f 'mlftable.cpp'; then $(CYGPATH_W) 'mlftable.cpp'; else $(CYGPATH_W) '$(srcdir)/mlftable.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-mlftable.Tpo $(DEPDIR)/ragel-mlftable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mlftable.cpp' object='ragel-mlftable.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-mlftable.obj `if test -f 'mlftable.cpp'; then $(CYGPATH_W) 'mlftable.cpp'; else $(CYGPATH_W) '$(srcdir)/mlftable.cpp'; fi`
+
+ragel-mlflat.o: mlflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-mlflat.o -MD -MP -MF $(DEPDIR)/ragel-mlflat.Tpo -c -o ragel-mlflat.o `test -f 'mlflat.cpp' || echo '$(srcdir)/'`mlflat.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-mlflat.Tpo $(DEPDIR)/ragel-mlflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mlflat.cpp' object='ragel-mlflat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-mlflat.o `test -f 'mlflat.cpp' || echo '$(srcdir)/'`mlflat.cpp
+
+ragel-mlflat.obj: mlflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-mlflat.obj -MD -MP -MF $(DEPDIR)/ragel-mlflat.Tpo -c -o ragel-mlflat.obj `if test -f 'mlflat.cpp'; then $(CYGPATH_W) 'mlflat.cpp'; else $(CYGPATH_W) '$(srcdir)/mlflat.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-mlflat.Tpo $(DEPDIR)/ragel-mlflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mlflat.cpp' object='ragel-mlflat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-mlflat.obj `if test -f 'mlflat.cpp'; then $(CYGPATH_W) 'mlflat.cpp'; else $(CYGPATH_W) '$(srcdir)/mlflat.cpp'; fi`
+
+ragel-mlfflat.o: mlfflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-mlfflat.o -MD -MP -MF $(DEPDIR)/ragel-mlfflat.Tpo -c -o ragel-mlfflat.o `test -f 'mlfflat.cpp' || echo '$(srcdir)/'`mlfflat.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-mlfflat.Tpo $(DEPDIR)/ragel-mlfflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mlfflat.cpp' object='ragel-mlfflat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-mlfflat.o `test -f 'mlfflat.cpp' || echo '$(srcdir)/'`mlfflat.cpp
+
+ragel-mlfflat.obj: mlfflat.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-mlfflat.obj -MD -MP -MF $(DEPDIR)/ragel-mlfflat.Tpo -c -o ragel-mlfflat.obj `if test -f 'mlfflat.cpp'; then $(CYGPATH_W) 'mlfflat.cpp'; else $(CYGPATH_W) '$(srcdir)/mlfflat.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-mlfflat.Tpo $(DEPDIR)/ragel-mlfflat.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mlfflat.cpp' object='ragel-mlfflat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-mlfflat.obj `if test -f 'mlfflat.cpp'; then $(CYGPATH_W) 'mlfflat.cpp'; else $(CYGPATH_W) '$(srcdir)/mlfflat.cpp'; fi`
+
+ragel-mlgoto.o: mlgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-mlgoto.o -MD -MP -MF $(DEPDIR)/ragel-mlgoto.Tpo -c -o ragel-mlgoto.o `test -f 'mlgoto.cpp' || echo '$(srcdir)/'`mlgoto.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-mlgoto.Tpo $(DEPDIR)/ragel-mlgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mlgoto.cpp' object='ragel-mlgoto.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-mlgoto.o `test -f 'mlgoto.cpp' || echo '$(srcdir)/'`mlgoto.cpp
+
+ragel-mlgoto.obj: mlgoto.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -MT ragel-mlgoto.obj -MD -MP -MF $(DEPDIR)/ragel-mlgoto.Tpo -c -o ragel-mlgoto.obj `if test -f 'mlgoto.cpp'; then $(CYGPATH_W) 'mlgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/mlgoto.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ragel-mlgoto.Tpo $(DEPDIR)/ragel-mlgoto.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='mlgoto.cpp' object='ragel-mlgoto.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ragel_CXXFLAGS) $(CXXFLAGS) -c -o ragel-mlgoto.obj `if test -f 'mlgoto.cpp'; then $(CYGPATH_W) 'mlgoto.cpp'; else $(CYGPATH_W) '$(srcdir)/mlgoto.cpp'; fi`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(PROGRAMS) config.h
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-hdr distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic ctags distclean distclean-compile \
+ distclean-generic distclean-hdr distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-binPROGRAMS install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-binPROGRAMS
+
+
+version.h: Makefile
+ echo '#define VERSION "$(PACKAGE_VERSION)"' > version.h
+ echo '#define PUBDATE "$(PUBDATE)"' >> version.h
+
+@BUILD_PARSERS_TRUE@rlparse.h: rlparse.kh
+@BUILD_PARSERS_TRUE@ kelbt -o $@ $<
+
+@BUILD_PARSERS_TRUE@rlparse.cpp: rlparse.kl rlparse.kh
+@BUILD_PARSERS_TRUE@ kelbt -o $@ $<
+
+# This dependency comes from the import of the parser defines
+# into the scanner.
+@BUILD_PARSERS_TRUE@rlscan.cpp: rlparse.h
+
+@BUILD_PARSERS_TRUE@rlscan.cpp: rlscan.rl
+@BUILD_PARSERS_TRUE@ ragel -G2 -I$(builddir) -o $@ $<
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/ragel/cdcodegen.cpp b/ragel/cdcodegen.cpp
index a0a882c..3d7cafc 100644
--- a/ragel/cdcodegen.cpp
+++ b/ragel/cdcodegen.cpp
@@ -329,6 +329,40 @@ string FsmCodeGen::KEY( Key key )
return ret.str();
}
+bool FsmCodeGen::isAlphTypeSigned()
+{
+ return keyOps->isSigned;
+}
+
+bool FsmCodeGen::isWideAlphTypeSigned()
+{
+ string ret;
+ if ( redFsm->maxKey <= keyOps->maxKey )
+ return isAlphTypeSigned();
+ else {
+ long long maxKeyVal = redFsm->maxKey.getLongLong();
+ HostType *wideType = keyOps->typeSubsumes( keyOps->isSigned, maxKeyVal );
+ return wideType->isSigned;
+ }
+}
+
+string FsmCodeGen::WIDE_KEY( RedStateAp *state, Key key )
+{
+ if ( state->stateCondList.length() > 0 ) {
+ ostringstream ret;
+ if ( isWideAlphTypeSigned() )
+ ret << key.getVal();
+ else
+ ret << (unsigned long) key.getVal() << 'u';
+ return ret.str();
+ }
+ else {
+ return KEY( key );
+ }
+}
+
+
+
void FsmCodeGen::EXEC( ostream &ret, GenInlineItem *item, int targState, int inFinish )
{
/* The parser gives fexec two children. The double brackets are for D
@@ -363,7 +397,7 @@ void FsmCodeGen::LM_SWITCH( ostream &ret, GenInlineItem *item,
ret << " break;\n";
}
- if ( hostLang->lang == HostLang::D && !haveDefault )
+ if ( (hostLang->lang == HostLang::D || hostLang->lang == HostLang::D2) && !haveDefault )
ret << " default: break;";
ret <<
@@ -655,6 +689,11 @@ string CCodeGen::PTR_CONST()
return "const ";
}
+string CCodeGen::PTR_CONST_END()
+{
+ return "";
+}
+
std::ostream &CCodeGen::OPEN_ARRAY( string type, string name )
{
out << "static const " << type << " " << name << "[] = {\n";
@@ -738,6 +777,11 @@ string DCodeGen::PTR_CONST()
return "";
}
+string DCodeGen::PTR_CONST_END()
+{
+ return "";
+}
+
std::ostream &DCodeGen::OPEN_ARRAY( string type, string name )
{
out << "static const " << type << "[] " << name << " = [\n";
@@ -796,6 +840,112 @@ void DCodeGen::writeExports()
* End D-specific code.
*/
+/*
+ * D2 Specific
+ */
+
+string D2CodeGen::NULL_ITEM()
+{
+ return "null";
+}
+
+string D2CodeGen::POINTER()
+{
+ // multiple items seperated by commas can also be pointer types.
+ return "* ";
+}
+
+string D2CodeGen::PTR_CONST()
+{
+ return "const(";
+}
+
+string D2CodeGen::PTR_CONST_END()
+{
+ return ")";
+}
+
+std::ostream &D2CodeGen::OPEN_ARRAY( string type, string name )
+{
+ out << "enum " << type << "[] " << name << " = [\n";
+ return out;
+}
+
+std::ostream &D2CodeGen::CLOSE_ARRAY()
+{
+ return out << "];\n";
+}
+
+std::ostream &D2CodeGen::STATIC_VAR( string type, string name )
+{
+ out << "enum " << type << " " << name;
+ return out;
+}
+
+string D2CodeGen::ARR_OFF( string ptr, string offset )
+{
+ return "&" + ptr + "[" + offset + "]";
+}
+
+string D2CodeGen::CAST( string type )
+{
+ return "cast(" + type + ")";
+}
+
+string D2CodeGen::UINT( )
+{
+ return "uint";
+}
+
+std::ostream &D2CodeGen::SWITCH_DEFAULT()
+{
+ out << " default: break;\n";
+ return out;
+}
+
+string D2CodeGen::CTRL_FLOW()
+{
+ return "if (true) ";
+}
+
+void D2CodeGen::writeExports()
+{
+ if ( exportList.length() > 0 ) {
+ for ( ExportList::Iter ex = exportList; ex.lte(); ex++ ) {
+ out << "enum " << ALPH_TYPE() << " " << DATA_PREFIX() <<
+ "ex_" << ex->name << " = " << KEY(ex->key) << ";\n";
+ }
+ out << "\n";
+ }
+}
+
+void D2CodeGen::SUB_ACTION( ostream &ret, GenInlineItem *item,
+ int targState, bool inFinish, bool csForced )
+{
+ if ( item->children->length() > 0 ) {
+ /* Write the block and close it off. */
+ ret << "{{";
+ INLINE_LIST( ret, item->children, targState, inFinish, csForced );
+ ret << "}}";
+ }
+}
+
+void D2CodeGen::ACTION( ostream &ret, GenAction *action, int targState,
+ bool inFinish, bool csForced )
+{
+ /* Write the preprocessor line info for going into the source file. */
+ cdLineDirective( ret, action->loc.fileName, action->loc.line );
+
+ /* Write the block and close it off. */
+ ret << "\t{{";
+ INLINE_LIST( ret, action->inlineList, targState, inFinish, csForced );
+ ret << "}}\n";
+}
+
+/*
+ * End D2-specific code.
+ */
+
void FsmCodeGen::finishRagelDef()
{
if ( codeStyle == GenGoto || codeStyle == GenFGoto ||
diff --git a/ragel/cdcodegen.h b/ragel/cdcodegen.h
index 23b2228..d8fe62d 100644
--- a/ragel/cdcodegen.h
+++ b/ragel/cdcodegen.h
@@ -73,14 +73,18 @@ protected:
string GET_WIDE_KEY( RedStateAp *state );
string TABS( int level );
string KEY( Key key );
+ string WIDE_KEY( RedStateAp *state, Key key );
string LDIR_PATH( char *path );
- void ACTION( ostream &ret, GenAction *action, int targState,
+ virtual void ACTION( ostream &ret, GenAction *action, int targState,
bool inFinish, bool csForced );
void CONDITION( ostream &ret, GenAction *condition );
string ALPH_TYPE();
string WIDE_ALPH_TYPE();
string ARRAY_TYPE( unsigned long maxVal );
+ bool isAlphTypeSigned();
+ bool isWideAlphTypeSigned();
+
virtual string ARR_OFF( string ptr, string offset ) = 0;
virtual string CAST( string type ) = 0;
virtual string UINT() = 0;
@@ -149,7 +153,7 @@ protected:
void SET_TOKSTART( ostream &ret, GenInlineItem *item );
void SET_TOKEND( ostream &ret, GenInlineItem *item );
void GET_TOKEND( ostream &ret, GenInlineItem *item );
- void SUB_ACTION( ostream &ret, GenInlineItem *item,
+ virtual void SUB_ACTION( ostream &ret, GenInlineItem *item,
int targState, bool inFinish, bool csForced );
void STATE_IDS();
@@ -157,6 +161,7 @@ protected:
string FIRST_FINAL_STATE();
virtual string PTR_CONST() = 0;
+ virtual string PTR_CONST_END() = 0;
virtual ostream &OPEN_ARRAY( string type, string name ) = 0;
virtual ostream &CLOSE_ARRAY() = 0;
virtual ostream &STATIC_VAR( string type, string name ) = 0;
@@ -195,6 +200,7 @@ public:
virtual string CAST( string type );
virtual string UINT();
virtual string PTR_CONST();
+ virtual string PTR_CONST_END();
virtual string CTRL_FLOW();
virtual void writeExports();
@@ -215,9 +221,36 @@ public:
virtual string CAST( string type );
virtual string UINT();
virtual string PTR_CONST();
+ virtual string PTR_CONST_END();
+ virtual string CTRL_FLOW();
+
+ virtual void writeExports();
+};
+
+class D2CodeGen : virtual public FsmCodeGen
+{
+public:
+ D2CodeGen( ostream &out ) : FsmCodeGen(out) {}
+
+ virtual string NULL_ITEM();
+ virtual string POINTER();
+ virtual ostream &SWITCH_DEFAULT();
+ virtual ostream &OPEN_ARRAY( string type, string name );
+ virtual ostream &CLOSE_ARRAY();
+ virtual ostream &STATIC_VAR( string type, string name );
+ virtual string ARR_OFF( string ptr, string offset );
+ virtual string CAST( string type );
+ virtual string UINT();
+ virtual string PTR_CONST();
+ virtual string PTR_CONST_END();
virtual string CTRL_FLOW();
virtual void writeExports();
+ virtual void SUB_ACTION( ostream &ret, GenInlineItem *item,
+ int targState, bool inFinish, bool csForced );
+ virtual void ACTION( ostream &ret, GenAction *action, int targState,
+ bool inFinish, bool csForced );
+
};
#endif
diff --git a/ragel/cdfflat.cpp b/ragel/cdfflat.cpp
index d2c1c78..79cc5be 100644
--- a/ragel/cdfflat.cpp
+++ b/ragel/cdfflat.cpp
@@ -257,12 +257,12 @@ void FFlatCodeGen::writeExec()
out << ";\n";
out <<
- " " << PTR_CONST() << WIDE_ALPH_TYPE() << POINTER() << "_keys;\n"
- " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxIndex) << POINTER() << "_inds;\n";
+ " " << PTR_CONST() << WIDE_ALPH_TYPE() << PTR_CONST_END() << POINTER() << "_keys;\n"
+ " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxIndex) << PTR_CONST_END() << POINTER() << "_inds;\n";
if ( redFsm->anyConditions() ) {
out <<
- " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxCond) << POINTER() << "_conds;\n"
+ " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxCond) << PTR_CONST_END() << POINTER() << "_conds;\n"
" " << WIDE_ALPH_TYPE() << " _widec;\n";
}
diff --git a/ragel/cdfflat.h b/ragel/cdfflat.h
index 406bca9..e5cbfbd 100644
--- a/ragel/cdfflat.h
+++ b/ragel/cdfflat.h
@@ -72,4 +72,14 @@ struct DFFlatCodeGen
FsmCodeGen(out), FFlatCodeGen(out), DCodeGen(out) {}
};
+/*
+ * D2FFlatCodeGen
+ */
+struct D2FFlatCodeGen
+ : public FFlatCodeGen, public D2CodeGen
+{
+ D2FFlatCodeGen( ostream &out ) :
+ FsmCodeGen(out), FFlatCodeGen(out), D2CodeGen(out) {}
+};
+
#endif
diff --git a/ragel/cdfgoto.h b/ragel/cdfgoto.h
index 802522d..27e980e 100644
--- a/ragel/cdfgoto.h
+++ b/ragel/cdfgoto.h
@@ -72,4 +72,14 @@ struct DFGotoCodeGen
FsmCodeGen(out), FGotoCodeGen(out), DCodeGen(out) {}
};
+/*
+ * class DFGotoCodeGen
+ */
+struct D2FGotoCodeGen
+ : public FGotoCodeGen, public D2CodeGen
+{
+ D2FGotoCodeGen( ostream &out ) :
+ FsmCodeGen(out), FGotoCodeGen(out), D2CodeGen(out) {}
+};
+
#endif
diff --git a/ragel/cdflat.cpp b/ragel/cdflat.cpp
index 7fa2a9d..6010f98 100644
--- a/ragel/cdflat.cpp
+++ b/ragel/cdflat.cpp
@@ -698,17 +698,17 @@ void FlatCodeGen::writeExec()
redFsm->anyRegActions() || redFsm->anyFromStateActions() )
{
out <<
- " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxActArrItem) << POINTER() << "_acts;\n"
+ " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxActArrItem) << PTR_CONST_END() << POINTER() << "_acts;\n"
" " << UINT() << " _nacts;\n";
}
out <<
- " " << PTR_CONST() << WIDE_ALPH_TYPE() << POINTER() << "_keys;\n"
- " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxIndex) << POINTER() << "_inds;\n";
+ " " << PTR_CONST() << WIDE_ALPH_TYPE() << PTR_CONST_END() << POINTER() << "_keys;\n"
+ " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxIndex) << PTR_CONST_END() << POINTER() << "_inds;\n";
if ( redFsm->anyConditions() ) {
out <<
- " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxCond) << POINTER() << "_conds;\n"
+ " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxCond) << PTR_CONST_END() << POINTER() << "_conds;\n"
" " << WIDE_ALPH_TYPE() << " _widec;\n";
}
@@ -827,7 +827,7 @@ void FlatCodeGen::writeExec()
if ( redFsm->anyEofActions() ) {
out <<
- " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxActArrItem) <<
+ " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxActArrItem) << PTR_CONST_END() <<
POINTER() << "__acts = " <<
ARR_OFF( A(), EA() + "[" + vCS() + "]" ) << ";\n"
" " << UINT() << " __nacts = " << CAST(UINT()) << " *__acts++;\n"
diff --git a/ragel/cdflat.h b/ragel/cdflat.h
index 1a43e3e..96c65cb 100644
--- a/ragel/cdflat.h
+++ b/ragel/cdflat.h
@@ -105,4 +105,14 @@ struct DFlatCodeGen
FsmCodeGen(out), FlatCodeGen(out), DCodeGen(out) {}
};
+/*
+ * D2FlatCodeGen
+ */
+struct D2FlatCodeGen
+ : public FlatCodeGen, public D2CodeGen
+{
+ D2FlatCodeGen( ostream &out ) :
+ FsmCodeGen(out), FlatCodeGen(out), D2CodeGen(out) {}
+};
+
#endif
diff --git a/ragel/cdftable.cpp b/ragel/cdftable.cpp
index cb5a4ff..f5584e5 100644
--- a/ragel/cdftable.cpp
+++ b/ragel/cdftable.cpp
@@ -304,7 +304,7 @@ void FTabCodeGen::writeExec()
out <<
";\n"
- " " << PTR_CONST() << WIDE_ALPH_TYPE() << POINTER() << "_keys;\n"
+ " " << PTR_CONST() << WIDE_ALPH_TYPE() << PTR_CONST_END() << POINTER() << "_keys;\n"
" int _trans;\n";
if ( redFsm->anyConditions() )
diff --git a/ragel/cdftable.h b/ragel/cdftable.h
index d075723..4a8264c 100644
--- a/ragel/cdftable.h
+++ b/ragel/cdftable.h
@@ -74,4 +74,14 @@ struct DFTabCodeGen
FsmCodeGen(out), FTabCodeGen(out), DCodeGen(out) {}
};
+/*
+ * class D2FTabCodeGen
+ */
+struct D2FTabCodeGen
+ : public FTabCodeGen, public D2CodeGen
+{
+ D2FTabCodeGen( ostream &out ) :
+ FsmCodeGen(out), FTabCodeGen(out), D2CodeGen(out) {}
+};
+
#endif
diff --git a/ragel/cdgoto.cpp b/ragel/cdgoto.cpp
index d6f6bdf..e434143 100644
--- a/ragel/cdgoto.cpp
+++ b/ragel/cdgoto.cpp
@@ -118,7 +118,7 @@ void GotoCodeGen::emitSingleSwitch( RedStateAp *state )
if ( numSingles == 1 ) {
/* If there is a single single key then write it out as an if. */
out << "\tif ( " << GET_WIDE_KEY(state) << " == " <<
- KEY(data[0].lowKey) << " )\n\t\t";
+ WIDE_KEY(state, data[0].lowKey) << " )\n\t\t";
/* Virtual function for writing the target of the transition. */
TRANS_GOTO(data[0].value, 0) << "\n";
@@ -129,7 +129,7 @@ void GotoCodeGen::emitSingleSwitch( RedStateAp *state )
/* Write out the single indicies. */
for ( int j = 0; j < numSingles; j++ ) {
- out << "\t\tcase " << KEY(data[j].lowKey) << ": ";
+ out << "\t\tcase " << WIDE_KEY(state, data[j].lowKey) << ": ";
TRANS_GOTO(data[j].value, 0) << "\n";
}
@@ -158,10 +158,10 @@ void GotoCodeGen::emitRangeBSearch( RedStateAp *state, int level, int low, int h
if ( anyLower && anyHigher ) {
/* Can go lower and higher than mid. */
out << TABS(level) << "if ( " << GET_WIDE_KEY(state) << " < " <<
- KEY(data[mid].lowKey) << " ) {\n";
+ WIDE_KEY(state, data[mid].lowKey) << " ) {\n";
emitRangeBSearch( state, level+1, low, mid-1 );
out << TABS(level) << "} else if ( " << GET_WIDE_KEY(state) << " > " <<
- KEY(data[mid].highKey) << " ) {\n";
+ WIDE_KEY(state, data[mid].highKey) << " ) {\n";
emitRangeBSearch( state, level+1, mid+1, high );
out << TABS(level) << "} else\n";
TRANS_GOTO(data[mid].value, level+1) << "\n";
@@ -169,7 +169,7 @@ void GotoCodeGen::emitRangeBSearch( RedStateAp *state, int level, int low, int h
else if ( anyLower && !anyHigher ) {
/* Can go lower than mid but not higher. */
out << TABS(level) << "if ( " << GET_WIDE_KEY(state) << " < " <<
- KEY(data[mid].lowKey) << " ) {\n";
+ WIDE_KEY(state, data[mid].lowKey) << " ) {\n";
emitRangeBSearch( state, level+1, low, mid-1 );
/* if the higher is the highest in the alphabet then there is no
@@ -180,14 +180,14 @@ void GotoCodeGen::emitRangeBSearch( RedStateAp *state, int level, int low, int h
}
else {
out << TABS(level) << "} else if ( " << GET_WIDE_KEY(state) << " <= " <<
- KEY(data[mid].highKey) << " )\n";
+ WIDE_KEY(state, data[mid].highKey) << " )\n";
TRANS_GOTO(data[mid].value, level+1) << "\n";
}
}
else if ( !anyLower && anyHigher ) {
/* Can go higher than mid but not lower. */
out << TABS(level) << "if ( " << GET_WIDE_KEY(state) << " > " <<
- KEY(data[mid].highKey) << " ) {\n";
+ WIDE_KEY(state, data[mid].highKey) << " ) {\n";
emitRangeBSearch( state, level+1, mid+1, high );
/* If the lower end is the lowest in the alphabet then there is no
@@ -198,7 +198,7 @@ void GotoCodeGen::emitRangeBSearch( RedStateAp *state, int level, int low, int h
}
else {
out << TABS(level) << "} else if ( " << GET_WIDE_KEY(state) << " >= " <<
- KEY(data[mid].lowKey) << " )\n";
+ WIDE_KEY(state, data[mid].lowKey) << " )\n";
TRANS_GOTO(data[mid].value, level+1) << "\n";
}
}
@@ -206,18 +206,18 @@ void GotoCodeGen::emitRangeBSearch( RedStateAp *state, int level, int low, int h
/* Cannot go higher or lower than mid. It's mid or bust. What
* tests to do depends on limits of alphabet. */
if ( !limitLow && !limitHigh ) {
- out << TABS(level) << "if ( " << KEY(data[mid].lowKey) << " <= " <<
+ out << TABS(level) << "if ( " << WIDE_KEY(state, data[mid].lowKey) << " <= " <<
GET_WIDE_KEY(state) << " && " << GET_WIDE_KEY(state) << " <= " <<
- KEY(data[mid].highKey) << " )\n";
+ WIDE_KEY(state, data[mid].highKey) << " )\n";
TRANS_GOTO(data[mid].value, level+1) << "\n";
}
else if ( limitLow && !limitHigh ) {
out << TABS(level) << "if ( " << GET_WIDE_KEY(state) << " <= " <<
- KEY(data[mid].highKey) << " )\n";
+ WIDE_KEY(state, data[mid].highKey) << " )\n";
TRANS_GOTO(data[mid].value, level+1) << "\n";
}
else if ( !limitLow && limitHigh ) {
- out << TABS(level) << "if ( " << KEY(data[mid].lowKey) << " <= " <<
+ out << TABS(level) << "if ( " << WIDE_KEY(state, data[mid].lowKey) << " <= " <<
GET_WIDE_KEY(state) << " )\n";
TRANS_GOTO(data[mid].value, level+1) << "\n";
}
@@ -671,7 +671,7 @@ void GotoCodeGen::writeExec()
|| redFsm->anyFromStateActions() )
{
out <<
- " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxActArrItem) << POINTER() << "_acts;\n"
+ " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxActArrItem) << PTR_CONST_END() << POINTER() << "_acts;\n"
" " << UINT() << " _nacts;\n";
}
@@ -777,7 +777,7 @@ void GotoCodeGen::writeExec()
if ( redFsm->anyEofActions() ) {
out <<
- " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxActArrItem) <<
+ " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxActArrItem) << PTR_CONST_END() <<
POINTER() << "__acts = " <<
ARR_OFF( A(), EA() + "[" + vCS() + "]" ) << ";\n"
" " << UINT() << " __nacts = " << CAST(UINT()) << " *__acts++;\n"
diff --git a/ragel/cdgoto.h b/ragel/cdgoto.h
index 7de8e9b..e0869c8 100644
--- a/ragel/cdgoto.h
+++ b/ragel/cdgoto.h
@@ -106,4 +106,14 @@ struct DGotoCodeGen
FsmCodeGen(out), GotoCodeGen(out), DCodeGen(out) {}
};
+/*
+ * class D2GotoCodeGen
+ */
+struct D2GotoCodeGen
+ : public GotoCodeGen, public D2CodeGen
+{
+ D2GotoCodeGen( ostream &out ) :
+ FsmCodeGen(out), GotoCodeGen(out), D2CodeGen(out) {}
+};
+
#endif
diff --git a/ragel/cdipgoto.h b/ragel/cdipgoto.h
index cd5107e..c869e1f 100644
--- a/ragel/cdipgoto.h
+++ b/ragel/cdipgoto.h
@@ -92,4 +92,14 @@ struct DIpGotoCodeGen
FsmCodeGen(out), IpGotoCodeGen(out), DCodeGen(out) {}
};
+/*
+ * class D2IpGotoCodeGen
+ */
+struct D2IpGotoCodeGen
+ : public IpGotoCodeGen, public D2CodeGen
+{
+ D2IpGotoCodeGen( ostream &out ) :
+ FsmCodeGen(out), IpGotoCodeGen(out), D2CodeGen(out) {}
+};
+
#endif
diff --git a/ragel/cdsplit.h b/ragel/cdsplit.h
index c00fc90..03dea78 100644
--- a/ragel/cdsplit.h
+++ b/ragel/cdsplit.h
@@ -67,4 +67,14 @@ struct DSplitCodeGen
FsmCodeGen(out), SplitCodeGen(out), DCodeGen(out) {}
};
+/*
+ * class D2SplitCodeGen
+ */
+struct D2SplitCodeGen
+ : public SplitCodeGen, public D2CodeGen
+{
+ D2SplitCodeGen( ostream &out ) :
+ FsmCodeGen(out), SplitCodeGen(out), D2CodeGen(out) {}
+};
+
#endif
diff --git a/ragel/cdtable.cpp b/ragel/cdtable.cpp
index 827d3ad..2218839 100644
--- a/ragel/cdtable.cpp
+++ b/ragel/cdtable.cpp
@@ -619,9 +619,9 @@ void TabCodeGen::LOCATE_TRANS()
"\n"
" _klen = " << SL() << "[" << vCS() << "];\n"
" if ( _klen > 0 ) {\n"
- " " << PTR_CONST() << WIDE_ALPH_TYPE() << POINTER() << "_lower = _keys;\n"
- " " << PTR_CONST() << WIDE_ALPH_TYPE() << POINTER() << "_mid;\n"
- " " << PTR_CONST() << WIDE_ALPH_TYPE() << POINTER() << "_upper = _keys + _klen - 1;\n"
+ " " << PTR_CONST() << WIDE_ALPH_TYPE() << PTR_CONST_END() << POINTER() << "_lower = _keys;\n"
+ " " << PTR_CONST() << WIDE_ALPH_TYPE() << PTR_CONST_END() << POINTER() << "_mid;\n"
+ " " << PTR_CONST() << WIDE_ALPH_TYPE() << PTR_CONST_END() << POINTER() << "_upper = _keys + _klen - 1;\n"
" while (1) {\n"
" if ( _upper < _lower )\n"
" break;\n"
@@ -632,7 +632,7 @@ void TabCodeGen::LOCATE_TRANS()
" else if ( " << GET_WIDE_KEY() << " > *_mid )\n"
" _lower = _mid + 1;\n"
" else {\n"
- " _trans += (_mid - _keys);\n"
+ " _trans += " << CAST(UINT()) << "(_mid - _keys);\n"
" goto _match;\n"
" }\n"
" }\n"
@@ -642,9 +642,9 @@ void TabCodeGen::LOCATE_TRANS()
"\n"
" _klen = " << RL() << "[" << vCS() << "];\n"
" if ( _klen > 0 ) {\n"
- " " << PTR_CONST() << WIDE_ALPH_TYPE() << POINTER() << "_lower = _keys;\n"
- " " << PTR_CONST() << WIDE_ALPH_TYPE() << POINTER() << "_mid;\n"
- " " << PTR_CONST() << WIDE_ALPH_TYPE() << POINTER() << "_upper = _keys + (_klen<<1) - 2;\n"
+ " " << PTR_CONST() << WIDE_ALPH_TYPE() << PTR_CONST_END() << POINTER() << "_lower = _keys;\n"
+ " " << PTR_CONST() << WIDE_ALPH_TYPE() << PTR_CONST_END() << POINTER() << "_mid;\n"
+ " " << PTR_CONST() << WIDE_ALPH_TYPE() << PTR_CONST_END() << POINTER() << "_upper = _keys + (_klen<<1) - 2;\n"
" while (1) {\n"
" if ( _upper < _lower )\n"
" break;\n"
@@ -655,7 +655,7 @@ void TabCodeGen::LOCATE_TRANS()
" else if ( " << GET_WIDE_KEY() << " > _mid[1] )\n"
" _lower = _mid + 2;\n"
" else {\n"
- " _trans += ((_mid - _keys)>>1);\n"
+ " _trans += " << CAST(UINT()) << "((_mid - _keys)>>1);\n"
" goto _match;\n"
" }\n"
" }\n"
@@ -876,9 +876,9 @@ void TabCodeGen::COND_TRANSLATE()
" _klen = " << CL() << "[" << vCS() << "];\n"
" _keys = " << ARR_OFF( CK(), "(" + CO() + "[" + vCS() + "]*2)" ) << ";\n"
" if ( _klen > 0 ) {\n"
- " " << PTR_CONST() << WIDE_ALPH_TYPE() << POINTER() << "_lower = _keys;\n"
- " " << PTR_CONST() << WIDE_ALPH_TYPE() << POINTER() << "_mid;\n"
- " " << PTR_CONST() << WIDE_ALPH_TYPE() << POINTER() << "_upper = _keys + (_klen<<1) - 2;\n"
+ " " << PTR_CONST() << WIDE_ALPH_TYPE() << PTR_CONST_END() << POINTER() << "_lower = _keys;\n"
+ " " << PTR_CONST() << WIDE_ALPH_TYPE() << PTR_CONST_END() << POINTER() << "_mid;\n"
+ " " << PTR_CONST() << WIDE_ALPH_TYPE() << PTR_CONST_END() << POINTER() << "_upper = _keys + (_klen<<1) - 2;\n"
" while (1) {\n"
" if ( _upper < _lower )\n"
" break;\n"
@@ -945,13 +945,13 @@ void TabCodeGen::writeExec()
|| redFsm->anyFromStateActions() )
{
out <<
- " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxActArrItem) <<
+ " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxActArrItem) << PTR_CONST_END() <<
POINTER() << "_acts;\n"
" " << UINT() << " _nacts;\n";
}
out <<
- " " << PTR_CONST() << WIDE_ALPH_TYPE() << POINTER() << "_keys;\n"
+ " " << PTR_CONST() << WIDE_ALPH_TYPE() << PTR_CONST_END() << POINTER() << "_keys;\n"
"\n";
if ( !noEnd ) {
@@ -1072,7 +1072,7 @@ void TabCodeGen::writeExec()
if ( redFsm->anyEofActions() ) {
out <<
- " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxActArrItem) <<
+ " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxActArrItem) << PTR_CONST_END() <<
POINTER() << "__acts = " <<
ARR_OFF( A(), EA() + "[" + vCS() + "]" ) << ";\n"
" " << UINT() << " __nacts = " << CAST(UINT()) << " *__acts++;\n"
diff --git a/ragel/cdtable.h b/ragel/cdtable.h
index b038283..b8df71b 100644
--- a/ragel/cdtable.h
+++ b/ragel/cdtable.h
@@ -111,4 +111,14 @@ struct DTabCodeGen
FsmCodeGen(out), TabCodeGen(out), DCodeGen(out) {}
};
+/*
+ * D2TabCodeGen
+ */
+struct D2TabCodeGen
+ : public TabCodeGen, public D2CodeGen
+{
+ D2TabCodeGen( ostream &out ) :
+ FsmCodeGen(out), TabCodeGen(out), D2CodeGen(out) {}
+};
+
#endif
diff --git a/ragel/common.cpp b/ragel/common.cpp
index d5e945d..3047e70 100644
--- a/ragel/common.cpp
+++ b/ragel/common.cpp
@@ -27,14 +27,14 @@
HostType hostTypesC[] =
{
- { "char", 0, "char", true, CHAR_MIN, CHAR_MAX, sizeof(char) },
- { "unsigned", "char", "uchar", false, 0, UCHAR_MAX, sizeof(unsigned char) },
- { "short", 0, "short", true, SHRT_MIN, SHRT_MAX, sizeof(short) },
- { "unsigned", "short", "ushort", false, 0, USHRT_MAX, sizeof(unsigned short) },
- { "int", 0, "int", true, INT_MIN, INT_MAX, sizeof(int) },
- { "unsigned", "int", "uint", false, 0, UINT_MAX, sizeof(unsigned int) },
- { "long", 0, "long", true, LONG_MIN, LONG_MAX, sizeof(long) },
- { "unsigned", "long", "ulong", false, 0, ULONG_MAX, sizeof(unsigned long) }
+ { "char", 0, "char", true, true, false, CHAR_MIN, CHAR_MAX, sizeof(char) },
+ { "unsigned", "char", "uchar", false, true, false, 0, UCHAR_MAX, sizeof(unsigned char) },
+ { "short", 0, "short", true, true, false, SHRT_MIN, SHRT_MAX, sizeof(short) },
+ { "unsigned", "short", "ushort", false, true, false, 0, USHRT_MAX, sizeof(unsigned short) },
+ { "int", 0, "int", true, true, false, INT_MIN, INT_MAX, sizeof(int) },
+ { "unsigned", "int", "uint", false, true, false, 0, UINT_MAX, sizeof(unsigned int) },
+ { "long", 0, "long", true, true, false, LONG_MIN, LONG_MAX, sizeof(long) },
+ { "unsigned", "long", "ulong", false, true, false, 0, ULONG_MAX, sizeof(unsigned long) }
};
#define S8BIT_MIN -128
@@ -49,64 +49,90 @@ HostType hostTypesC[] =
#define U16BIT_MIN 0
#define U16BIT_MAX 65535
-#define S32BIT_MIN –2147483648l
-#define S32BIT_MAX 2147483647l
+#define S31BIT_MIN -1073741824L
+#define S31BIT_MAX 1073741823L
+
+#define S32BIT_MIN -2147483648L
+#define S32BIT_MAX 2147483647L
#define U32BIT_MIN 0
-#define U32BIT_MAX 4294967295l
+#define U32BIT_MAX 4294967295UL
-#define S64BIT_MIN –9223372036854775808ll
-#define S64BIT_MAX 9223372036854775807ll
+#define S64BIT_MIN -9223372036854775807LL
+#define S64BIT_MAX 9223372036854775807LL
#define U64BIT_MIN 0
-#define U64BIT_MAX 18446744073709551615ll
+#define U64BIT_MAX 18446744073709551615ULL
HostType hostTypesD[] =
{
- { "byte", 0, "byte", true, CHAR_MIN, CHAR_MAX, 1 },
- { "ubyte", 0, "ubyte", false, 0, UCHAR_MAX, 1 },
- { "char", 0, "char", false, 0, UCHAR_MAX, 1 },
- { "short", 0, "short", true, SHRT_MIN, SHRT_MAX, 2 },
- { "ushort", 0, "ushort", false, 0, USHRT_MAX, 2 },
- { "wchar", 0, "wchar", false, 0, USHRT_MAX, 2 },
- { "int", 0, "int", true, INT_MIN, INT_MAX, 4 },
- { "uint", 0, "uint", false, 0, UINT_MAX, 4 },
- { "dchar", 0, "dchar", false, 0, UINT_MAX, 4 }
+ { "byte", 0, "byte", true, true, false, CHAR_MIN, CHAR_MAX, 1 },
+ { "ubyte", 0, "ubyte", false, true, false, 0, UCHAR_MAX, 1 },
+ { "char", 0, "char", false, true, false, 0, UCHAR_MAX, 1 },
+ { "short", 0, "short", true, true, false, SHRT_MIN, SHRT_MAX, 2 },
+ { "ushort", 0, "ushort", false, true, false, 0, USHRT_MAX, 2 },
+ { "wchar", 0, "wchar", false, true, false, 0, USHRT_MAX, 2 },
+ { "int", 0, "int", true, true, false, INT_MIN, INT_MAX, 4 },
+ { "uint", 0, "uint", false, true, false, 0, UINT_MAX, 4 },
+ { "dchar", 0, "dchar", false, true, false, 0, UINT_MAX, 4 }
+};
+
+HostType hostTypesGo[] =
+{
+ { "byte", 0, "uint8", false, true, false, U8BIT_MIN, U8BIT_MAX, 1 },
+ { "int8", 0, "int8", true, true, false, S8BIT_MIN, S8BIT_MAX, 1 },
+ { "uint8", 0, "uint8", false, true, false, U8BIT_MIN, U8BIT_MAX, 1 },
+ { "int16", 0, "int16", true, true, false, S16BIT_MIN, S16BIT_MAX, 2 },
+ { "uint16", 0, "uint16", false, true, false, U16BIT_MIN, U16BIT_MAX, 2 },
+ { "int32", 0, "int32", true, true, false, S32BIT_MIN, S32BIT_MAX, 4 },
+ { "uint32", 0, "uint32", false, true, false, U32BIT_MIN, U32BIT_MAX, 4 },
+ { "int64", 0, "int64", true, true, false, S64BIT_MIN, S64BIT_MAX, 8 },
+ { "uint64", 0, "uint64", false, true, false, U64BIT_MIN, U64BIT_MAX, 8 },
+ { "rune", 0, "int32", true, true, true, S32BIT_MIN, S32BIT_MAX, 4 }
};
HostType hostTypesJava[] =
{
- { "byte", 0, "byte", true, CHAR_MIN, CHAR_MAX, 1 },
- { "short", 0, "short", true, SHRT_MIN, SHRT_MAX, 2 },
- { "char", 0, "char", false, 0, USHRT_MAX, 2 },
- { "int", 0, "int", true, INT_MIN, INT_MAX, 4 },
+ { "byte", 0, "byte", true, true, false, CHAR_MIN, CHAR_MAX, 1 },
+ { "short", 0, "short", true, true, false, SHRT_MIN, SHRT_MAX, 2 },
+ { "char", 0, "char", false, true, false, 0, USHRT_MAX, 2 },
+ { "int", 0, "int", true, true, false, INT_MIN, INT_MAX, 4 },
};
/* What are the appropriate types for ruby? */
HostType hostTypesRuby[] =
{
- { "char", 0, "char", true, CHAR_MIN, CHAR_MAX, 1 },
- { "int", 0, "int", true, INT_MIN, INT_MAX, 4 },
+ { "char", 0, "char", true, true, false, CHAR_MIN, CHAR_MAX, 1 },
+ { "int", 0, "int", true, true, false, INT_MIN, INT_MAX, 4 },
};
HostType hostTypesCSharp[] =
{
- { "sbyte", 0, "sbyte", true, CHAR_MIN, CHAR_MAX, 1 },
- { "byte", 0, "byte", false, 0, UCHAR_MAX, 1 },
- { "short", 0, "short", true, SHRT_MIN, SHRT_MAX, 2 },
- { "ushort", 0, "ushort", false, 0, USHRT_MAX, 2 },
- { "char", 0, "char", false, 0, USHRT_MAX, 2 },
- { "int", 0, "int", true, INT_MIN, INT_MAX, 4 },
- { "uint", 0, "uint", false, 0, UINT_MAX, 4 },
- { "long", 0, "long", true, LONG_MIN, LONG_MAX, 8 },
- { "ulong", 0, "ulong", false, 0, ULONG_MAX, 8 }
+ { "sbyte", 0, "sbyte", true, true, false, CHAR_MIN, CHAR_MAX, 1 },
+ { "byte", 0, "byte", false, true, false, 0, UCHAR_MAX, 1 },
+ { "short", 0, "short", true, true, false, SHRT_MIN, SHRT_MAX, 2 },
+ { "ushort", 0, "ushort", false, true, false, 0, USHRT_MAX, 2 },
+ { "char", 0, "char", false, true, true, 0, USHRT_MAX, 2 },
+ { "int", 0, "int", true, true, false, INT_MIN, INT_MAX, 4 },
+ { "uint", 0, "uint", false, true, false, 0, UINT_MAX, 4 },
+ { "long", 0, "long", true, true, false, LONG_MIN, LONG_MAX, 8 },
+ { "ulong", 0, "ulong", false, true, false, 0, ULONG_MAX, 8 }
+};
+
+HostType hostTypesOCaml[] =
+{
+// { "char", 0, "char", false, true, false, 0, UCHAR_MAX, 1 },
+ { "int", 0, "int", true, true, false, S31BIT_MIN, S31BIT_MAX, 4 },
};
-HostLang hostLangC = { HostLang::C, hostTypesC, 8, hostTypesC+0, true };
-HostLang hostLangD = { HostLang::D, hostTypesD, 9, hostTypesD+2, true };
-HostLang hostLangJava = { HostLang::Java, hostTypesJava, 4, hostTypesJava+2, false };
-HostLang hostLangRuby = { HostLang::Ruby, hostTypesRuby, 2, hostTypesRuby+0, false };
-HostLang hostLangCSharp = { HostLang::CSharp, hostTypesCSharp, 9, hostTypesCSharp+4, true };
+HostLang hostLangC = { HostLang::C, hostTypesC, 8, hostTypesC+0, true };
+HostLang hostLangD = { HostLang::D, hostTypesD, 9, hostTypesD+2, true };
+HostLang hostLangD2 = { HostLang::D2, hostTypesD, 9, hostTypesD+2, true };
+HostLang hostLangGo = { HostLang::Go, hostTypesGo, 10, hostTypesGo+0, false };
+HostLang hostLangJava = { HostLang::Java, hostTypesJava, 4, hostTypesJava+2, false };
+HostLang hostLangRuby = { HostLang::Ruby, hostTypesRuby, 2, hostTypesRuby+0, false };
+HostLang hostLangCSharp = { HostLang::CSharp, hostTypesCSharp, 9, hostTypesCSharp+4, true };
+HostLang hostLangOCaml = { HostLang::OCaml, hostTypesOCaml, 1, hostTypesOCaml+0, false };
HostLang *hostLang = &hostLangC;
diff --git a/ragel/common.h b/ragel/common.h
index a9ec27a..b26da68 100644
--- a/ragel/common.h
+++ b/ragel/common.h
@@ -114,6 +114,8 @@ struct HostType
const char *data2;
const char *internalName;
bool isSigned;
+ bool isOrd;
+ bool isChar;
long long minVal;
long long maxVal;
unsigned int size;
@@ -124,7 +126,7 @@ struct HostLang
/* Target language. */
enum Lang
{
- C, D, Java, Ruby, CSharp
+ C, D, D2, Go, Java, Ruby, CSharp, OCaml
};
Lang lang;
@@ -138,9 +140,12 @@ extern HostLang *hostLang;
extern HostLang hostLangC;
extern HostLang hostLangD;
+extern HostLang hostLangD2;
+extern HostLang hostLangGo;
extern HostLang hostLangJava;
extern HostLang hostLangRuby;
extern HostLang hostLangCSharp;
+extern HostLang hostLangOCaml;
HostType *findAlphType( const char *s1 );
HostType *findAlphType( const char *s1, const char *s2 );
diff --git a/ragel/config.h.in b/ragel/config.h.in
new file mode 100644
index 0000000..2dd9bdb
--- /dev/null
+++ b/ragel/config.h.in
@@ -0,0 +1,25 @@
+/* ragel/config.h.in. Generated from configure.in by autoheader. */
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Version number of package */
+#undef VERSION
diff --git a/ragel/cscodegen.cpp b/ragel/cscodegen.cpp
index c04511a..6de1506 100644
--- a/ragel/cscodegen.cpp
+++ b/ragel/cscodegen.cpp
@@ -340,8 +340,10 @@ string CSharpFsmCodeGen::ALPHA_KEY( Key key )
if (key.getVal() > 0xFFFF) {
ret << key.getVal();
} else {
- ret << "'\\u" << std::hex << std::setw(4) << std::setfill('0') <<
- key.getVal() << "'";
+ if ( keyOps->alphType->isChar )
+ ret << "'\\u" << std::hex << std::setw(4) << std::setfill('0') << key.getVal() << "'";
+ else
+ ret << key.getVal();
}
//ret << "(char) " << key.getVal();
return ret.str();
@@ -672,7 +674,12 @@ string CSharpCodeGen::GET_KEY()
}
else {
/* Expression for retrieving the key, use simple dereference. */
- ret << "data[" << P() << "]";
+ if ( dataExpr == 0 )
+ ret << "data";
+ else
+ INLINE_LIST( ret, dataExpr, 0, false );
+
+ ret << "[" << P() << "]";
}
return ret.str();
}
diff --git a/ragel/csflat.cpp b/ragel/csflat.cpp
index 3762839..4d5bafa 100644
--- a/ragel/csflat.cpp
+++ b/ragel/csflat.cpp
@@ -267,7 +267,11 @@ std::ostream &CSharpFlatCodeGen::COND_KEYS()
/* Output one last number so we don't have to figure out when the last
* entry is and avoid writing a comma. */
- out << "(char) " << 0 << "\n";
+ if ( keyOps->alphType->isChar )
+ out << "(char) " << 0 << "\n";
+ else
+ out << 0 << "\n";
+
return out;
}
@@ -352,7 +356,11 @@ std::ostream &CSharpFlatCodeGen::KEYS()
/* Output one last number so we don't have to figure out when the last
* entry is and avoid writing a comma. */
- out << "(char) " << 0 << "\n";
+ if ( keyOps->alphType->isChar )
+ out << "(char) " << 0 << "\n";
+ else
+ out << 0 << "\n";
+
return out;
}
@@ -716,8 +724,8 @@ void CSharpFlatCodeGen::writeExec()
redFsm->anyRegActions() || redFsm->anyFromStateActions() )
{
out <<
- " " << actsType << " _acts;\n"
- " " << nactsType << " _nacts;\n";
+ " int _acts;\n"
+ " int _nacts;\n";
}
out <<
@@ -877,8 +885,6 @@ void CSharpFlatCodeGen::initVarTypes()
{
slenType = ARRAY_TYPE(MAX(redFsm->maxSpan, redFsm->maxCondSpan));
transType = ARRAY_TYPE(redFsm->maxIndex+1);
- actsType = ARRAY_TYPE(redFsm->maxActionLoc);
- nactsType = ARRAY_TYPE(redFsm->maxActArrItem);
indsType = ARRAY_TYPE(redFsm->maxFlatIndexOffset);
condsType = ARRAY_TYPE(redFsm->maxCondIndexOffset);
}
diff --git a/ragel/csflat.h b/ragel/csflat.h
index 9f55f61..a576cd9 100644
--- a/ragel/csflat.h
+++ b/ragel/csflat.h
@@ -85,7 +85,7 @@ protected:
virtual void writeExec();
void initVarTypes();
- string slenType, transType, actsType, nactsType, indsType, condsType;
+ string slenType, transType, indsType, condsType;
};
#endif
diff --git a/ragel/cstable.cpp b/ragel/cstable.cpp
index cde4ba9..72df0a6 100644
--- a/ragel/cstable.cpp
+++ b/ragel/cstable.cpp
@@ -372,7 +372,11 @@ std::ostream &CSharpTabCodeGen::COND_KEYS()
/* Output one last number so we don't have to figure out when the last
* entry is and avoid writing a comma. */
- out << 0 << "\n";
+ if ( keyOps->alphType->isChar )
+ out << "(char) " << 0 << "\n";
+ else
+ out << 0 << "\n";
+
return out;
}
@@ -424,7 +428,11 @@ std::ostream &CSharpTabCodeGen::KEYS()
/* Output one last number so we don't have to figure out when the last
* entry is and avoid writing a comma. */
- out << "(char) " << 0 << "\n";
+ if ( keyOps->alphType->isChar )
+ out << "(char) " << 0 << "\n";
+ else
+ out << 0 << "\n";
+
return out;
}
@@ -949,8 +957,8 @@ void CSharpTabCodeGen::writeExec()
|| redFsm->anyFromStateActions() )
{
out <<
- " " << actsType << " _acts;\n"
- " " << nactsType << " _nacts;\n";
+ " int _acts;\n"
+ " int _nacts;\n";
}
out <<
@@ -1077,9 +1085,9 @@ void CSharpTabCodeGen::writeExec()
if ( redFsm->anyEofActions() ) {
out <<
- " " << actsType << " __acts = " <<
+ " int __acts = " <<
EA() << "[" << vCS() << "]" << ";\n"
- " " << nactsType << " __nacts = " <<
+ " int __nacts = " <<
A() << "[__acts++];\n"
" while ( __nacts-- > 0 ) {\n"
" switch ( " << A() << "[__acts++] ) {\n";
@@ -1112,6 +1120,4 @@ void CSharpTabCodeGen::initVarTypes()
klenType = ARRAY_TYPE(klenMax);
keysType = ARRAY_TYPE(keysMax);
signedKeysType = ARRAY_TYPE(keysMax, true);
- actsType = ARRAY_TYPE(redFsm->maxActionLoc);
- nactsType = ARRAY_TYPE(redFsm->maxActArrItem);
}
diff --git a/ragel/cstable.h b/ragel/cstable.h
index 623f670..a8206fc 100644
--- a/ragel/cstable.h
+++ b/ragel/cstable.h
@@ -95,8 +95,6 @@ protected:
string keysType;
string signedKeysType;
string transType;
- string actsType;
- string nactsType;
};
#endif
diff --git a/ragel/fsmap.cpp b/ragel/fsmap.cpp
index 12d9e56..0a98799 100644
--- a/ragel/fsmap.cpp
+++ b/ragel/fsmap.cpp
@@ -827,7 +827,6 @@ bool FsmAp::hasOutData( StateAp *state )
* Setting Conditions.
*/
-
void logNewExpansion( Expansion *exp );
void logCondSpace( CondSpace *condSpace );
diff --git a/ragel/gendata.cpp b/ragel/gendata.cpp
index 8c57e2c..6e6b893 100644
--- a/ragel/gendata.cpp
+++ b/ragel/gendata.cpp
@@ -49,6 +49,21 @@
#include "javacodegen.h"
+#include "gocodegen.h"
+#include "gotable.h"
+#include "goftable.h"
+#include "goflat.h"
+#include "gofflat.h"
+#include "gogoto.h"
+#include "gofgoto.h"
+#include "goipgoto.h"
+
+#include "mltable.h"
+#include "mlftable.h"
+#include "mlflat.h"
+#include "mlfflat.h"
+#include "mlgoto.h"
+
#include "rubytable.h"
#include "rubyftable.h"
#include "rubyflat.h"
@@ -145,6 +160,35 @@ CodeGenData *cdMakeCodeGen( const char *sourceFileName, const char *fsmName, ost
}
break;
+ case HostLang::D2:
+ switch ( codeStyle ) {
+ case GenTables:
+ codeGen = new D2TabCodeGen(out);
+ break;
+ case GenFTables:
+ codeGen = new D2FTabCodeGen(out);
+ break;
+ case GenFlat:
+ codeGen = new D2FlatCodeGen(out);
+ break;
+ case GenFFlat:
+ codeGen = new D2FFlatCodeGen(out);
+ break;
+ case GenGoto:
+ codeGen = new D2GotoCodeGen(out);
+ break;
+ case GenFGoto:
+ codeGen = new D2FGotoCodeGen(out);
+ break;
+ case GenIpGoto:
+ codeGen = new D2IpGotoCodeGen(out);
+ break;
+ case GenSplit:
+ codeGen = new D2SplitCodeGen(out);
+ break;
+ }
+ break;
+
default: break;
}
@@ -166,6 +210,44 @@ CodeGenData *javaMakeCodeGen( const char *sourceFileName, const char *fsmName, o
}
/* Invoked by the parser when a ragel definition is opened. */
+CodeGenData *goMakeCodeGen( const char *sourceFileName, const char *fsmName, ostream &out )
+{
+ CodeGenData *codeGen = 0;
+
+ switch ( codeStyle ) {
+ case GenTables:
+ codeGen = new GoTabCodeGen(out);
+ break;
+ case GenFTables:
+ codeGen = new GoFTabCodeGen(out);
+ break;
+ case GenFlat:
+ codeGen = new GoFlatCodeGen(out);
+ break;
+ case GenFFlat:
+ codeGen = new GoFFlatCodeGen(out);
+ break;
+ case GenGoto:
+ codeGen = new GoGotoCodeGen(out);
+ break;
+ case GenFGoto:
+ codeGen = new GoFGotoCodeGen(out);
+ break;
+ case GenIpGoto:
+ codeGen = new GoIpGotoCodeGen(out);
+ break;
+ default:
+ cerr << "Invalid output style, only -T0, -T1, -F0, -F1, -G0, -G1 and -G2 are supported for Go.\n";
+ exit(1);
+ }
+
+ codeGen->sourceFileName = sourceFileName;
+ codeGen->fsmName = fsmName;
+
+ return codeGen;
+}
+
+/* Invoked by the parser when a ragel definition is opened. */
CodeGenData *rubyMakeCodeGen( const char *sourceFileName, const char *fsmName, ostream &out )
{
CodeGenData *codeGen = 0;
@@ -242,6 +324,38 @@ CodeGenData *csharpMakeCodeGen( const char *sourceFileName, const char *fsmName,
return codeGen;
}
+/* Invoked by the parser when a ragel definition is opened. */
+CodeGenData *ocamlMakeCodeGen( const char *sourceFileName, const char *fsmName, ostream &out )
+{
+ CodeGenData *codeGen = 0;
+
+ switch ( codeStyle ) {
+ case GenTables:
+ codeGen = new OCamlTabCodeGen(out);
+ break;
+ case GenFTables:
+ codeGen = new OCamlFTabCodeGen(out);
+ break;
+ case GenFlat:
+ codeGen = new OCamlFlatCodeGen(out);
+ break;
+ case GenFFlat:
+ codeGen = new OCamlFFlatCodeGen(out);
+ break;
+ case GenGoto:
+ codeGen = new OCamlGotoCodeGen(out);
+ break;
+ default:
+ cerr << "I only support the -T0 -T1 -F0 -F1 and -G0 output styles for OCaml.\n";
+ exit(1);
+ }
+
+ codeGen->sourceFileName = sourceFileName;
+ codeGen->fsmName = fsmName;
+
+ return codeGen;
+}
+
CodeGenData *makeCodeGen( const char *sourceFileName, const char *fsmName, ostream &out )
{
@@ -252,12 +366,18 @@ CodeGenData *makeCodeGen( const char *sourceFileName, const char *fsmName, ostre
cgd = cdMakeCodeGen( sourceFileName, fsmName, out );
else if ( hostLang == &hostLangD )
cgd = cdMakeCodeGen( sourceFileName, fsmName, out );
+ else if ( hostLang == &hostLangD2 )
+ cgd = cdMakeCodeGen( sourceFileName, fsmName, out );
+ else if ( hostLang == &hostLangGo )
+ cgd = goMakeCodeGen( sourceFileName, fsmName, out );
else if ( hostLang == &hostLangJava )
cgd = javaMakeCodeGen( sourceFileName, fsmName, out );
else if ( hostLang == &hostLangRuby )
cgd = rubyMakeCodeGen( sourceFileName, fsmName, out );
else if ( hostLang == &hostLangCSharp )
cgd = csharpMakeCodeGen( sourceFileName, fsmName, out );
+ else if ( hostLang == &hostLangOCaml )
+ cgd = ocamlMakeCodeGen( sourceFileName, fsmName, out );
return cgd;
}
@@ -268,12 +388,18 @@ void lineDirective( ostream &out, const char *fileName, int line )
cdLineDirective( out, fileName, line );
else if ( hostLang == &hostLangD )
cdLineDirective( out, fileName, line );
+ else if ( hostLang == &hostLangD2 )
+ cdLineDirective( out, fileName, line );
+ else if ( hostLang == &hostLangGo )
+ goLineDirective( out, fileName, line );
else if ( hostLang == &hostLangJava )
javaLineDirective( out, fileName, line );
else if ( hostLang == &hostLangRuby )
rubyLineDirective( out, fileName, line );
else if ( hostLang == &hostLangCSharp )
csharpLineDirective( out, fileName, line );
+ else if ( hostLang == &hostLangOCaml )
+ ocamlLineDirective( out, fileName, line );
}
}
diff --git a/ragel/gendata.h b/ragel/gendata.h
index 4d21820..ec91891 100644
--- a/ragel/gendata.h
+++ b/ragel/gendata.h
@@ -45,8 +45,10 @@ typedef AvlMapEl<char *, CodeGenData*> CodeGenMapEl;
void cdLineDirective( ostream &out, const char *fileName, int line );
void javaLineDirective( ostream &out, const char *fileName, int line );
+void goLineDirective( ostream &out, const char *fileName, int line );
void rubyLineDirective( ostream &out, const char *fileName, int line );
void csharpLineDirective( ostream &out, const char *fileName, int line );
+void ocamlLineDirective( ostream &out, const char *fileName, int line );
void genLineDirective( ostream &out );
void lineDirective( ostream &out, const char *fileName, int line );
diff --git a/ragel/gocodegen.cpp b/ragel/gocodegen.cpp
new file mode 100644
index 0000000..a9b89e8
--- /dev/null
+++ b/ragel/gocodegen.cpp
@@ -0,0 +1,776 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "gocodegen.h"
+#include "ragel.h"
+#include "redfsm.h"
+#include "gendata.h"
+#include <sstream>
+#include <string>
+#include <assert.h>
+
+
+using std::ostream;
+using std::ostringstream;
+using std::string;
+using std::cerr;
+using std::endl;
+using std::istream;
+using std::ifstream;
+using std::ostream;
+using std::ios;
+using std::cin;
+using std::cout;
+using std::cerr;
+using std::endl;
+
+/*
+ * Go Specific
+ */
+
+void goLineDirective( ostream &out, const char *fileName, int line )
+{
+ out << "// line " << line << " \"" << fileName << "\"" << endl;
+}
+
+void GoCodeGen::genLineDirective( ostream &out )
+{
+ std::streambuf *sbuf = out.rdbuf();
+ output_filter *filter = static_cast<output_filter*>(sbuf);
+ goLineDirective( out, filter->fileName, filter->line + 1 );
+}
+
+unsigned int GoCodeGen::arrayTypeSize( unsigned long maxVal )
+{
+ long long maxValLL = (long long) maxVal;
+ HostType *arrayType = keyOps->typeSubsumes( maxValLL );
+ assert( arrayType != 0 );
+ return arrayType->size;
+}
+
+string GoCodeGen::ARRAY_TYPE( unsigned long maxVal )
+{
+ long long maxValLL = (long long) maxVal;
+ HostType *arrayType = keyOps->typeSubsumes( maxValLL );
+ assert( arrayType != 0 );
+
+ string ret = arrayType->data1;
+ if ( arrayType->data2 != 0 ) {
+ ret += " ";
+ ret += arrayType->data2;
+ }
+ return ret;
+}
+
+
+/* Write out the fsm name. */
+string GoCodeGen::FSM_NAME()
+{
+ return fsmName;
+}
+
+/* Emit the offset of the start state as a decimal integer. */
+string GoCodeGen::START_STATE_ID()
+{
+ ostringstream ret;
+ ret << redFsm->startState->id;
+ return ret.str();
+};
+
+/* Write out the array of actions. */
+std::ostream &GoCodeGen::ACTIONS_ARRAY()
+{
+ out << " 0, ";
+ int totalActions = 1;
+ for ( GenActionTableMap::Iter act = redFsm->actionMap; act.lte(); act++ ) {
+ /* Write out the length, which will never be the last character. */
+ out << act->key.length() << ", ";
+ if ( totalActions++ % IALL == 0 )
+ out << endl << " ";
+
+ for ( GenActionTable::Iter item = act->key; item.lte(); item++ ) {
+ out << item->value->actionId << ", ";
+ if ( ! (act.last() && item.last()) ) {
+ if ( totalActions++ % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ }
+ out << endl;
+ return out;
+}
+
+
+string GoCodeGen::ACCESS()
+{
+ ostringstream ret;
+ if ( accessExpr != 0 )
+ INLINE_LIST( ret, accessExpr, 0, false, false );
+ return ret.str();
+}
+
+
+string GoCodeGen::P()
+{
+ ostringstream ret;
+ if ( pExpr == 0 )
+ ret << "p";
+ else {
+ ret << "(";
+ INLINE_LIST( ret, pExpr, 0, false, false );
+ ret << ")";
+ }
+ return ret.str();
+}
+
+string GoCodeGen::PE()
+{
+ ostringstream ret;
+ if ( peExpr == 0 )
+ ret << "pe";
+ else {
+ ret << "(";
+ INLINE_LIST( ret, peExpr, 0, false, false );
+ ret << ")";
+ }
+ return ret.str();
+}
+
+string GoCodeGen::vEOF()
+{
+ ostringstream ret;
+ if ( eofExpr == 0 )
+ ret << "eof";
+ else {
+ ret << "(";
+ INLINE_LIST( ret, eofExpr, 0, false, false );
+ ret << ")";
+ }
+ return ret.str();
+}
+
+string GoCodeGen::vCS()
+{
+ ostringstream ret;
+ if ( csExpr == 0 )
+ ret << ACCESS() << "cs";
+ else {
+ /* Emit the user supplied method of retrieving the key. */
+ ret << "(";
+ INLINE_LIST( ret, csExpr, 0, false, false );
+ ret << ")";
+ }
+ return ret.str();
+}
+
+string GoCodeGen::TOP()
+{
+ ostringstream ret;
+ if ( topExpr == 0 )
+ ret << ACCESS() + "top";
+ else {
+ ret << "(";
+ INLINE_LIST( ret, topExpr, 0, false, false );
+ ret << ")";
+ }
+ return ret.str();
+}
+
+string GoCodeGen::STACK()
+{
+ ostringstream ret;
+ if ( stackExpr == 0 )
+ ret << ACCESS() + "stack";
+ else {
+ ret << "(";
+ INLINE_LIST( ret, stackExpr, 0, false, false );
+ ret << ")";
+ }
+ return ret.str();
+}
+
+string GoCodeGen::ACT()
+{
+ ostringstream ret;
+ if ( actExpr == 0 )
+ ret << ACCESS() + "act";
+ else {
+ ret << "(";
+ INLINE_LIST( ret, actExpr, 0, false, false );
+ ret << ")";
+ }
+ return ret.str();
+}
+
+string GoCodeGen::TOKSTART()
+{
+ ostringstream ret;
+ if ( tokstartExpr == 0 )
+ ret << ACCESS() + "ts";
+ else {
+ ret << "(";
+ INLINE_LIST( ret, tokstartExpr, 0, false, false );
+ ret << ")";
+ }
+ return ret.str();
+}
+
+string GoCodeGen::TOKEND()
+{
+ ostringstream ret;
+ if ( tokendExpr == 0 )
+ ret << ACCESS() + "te";
+ else {
+ ret << "(";
+ INLINE_LIST( ret, tokendExpr, 0, false, false );
+ ret << ")";
+ }
+ return ret.str();
+}
+
+string GoCodeGen::GET_WIDE_KEY()
+{
+ if ( redFsm->anyConditions() )
+ return "_widec";
+ else
+ return GET_KEY();
+}
+
+string GoCodeGen::GET_WIDE_KEY( RedStateAp *state )
+{
+ if ( state->stateCondList.length() > 0 )
+ return "_widec";
+ else
+ return GET_KEY();
+}
+
+string GoCodeGen::GET_KEY()
+{
+ ostringstream ret;
+ if ( getKeyExpr != 0 ) {
+ /* Emit the user supplied method of retrieving the key. */
+ ret << "(";
+ INLINE_LIST( ret, getKeyExpr, 0, false, false );
+ ret << ")";
+ }
+ else {
+ /* Expression for retrieving the key, use simple dereference. */
+ ret << DATA() << "[" << P() << "]";
+ }
+ return ret.str();
+}
+
+/* Write out level number of tabs. Makes the nested binary search nice
+ * looking. */
+string GoCodeGen::TABS( int level )
+{
+ string result;
+ while ( level-- > 0 )
+ result += "\t";
+ return result;
+}
+
+/* Write out a key from the fsm code gen. Depends on wether or not the key is
+ * signed. */
+string GoCodeGen::KEY( Key key )
+{
+ ostringstream ret;
+ if ( keyOps->isSigned || !hostLang->explicitUnsigned )
+ ret << key.getVal();
+ else
+ ret << (unsigned long) key.getVal() << 'u';
+ return ret.str();
+}
+
+bool GoCodeGen::isAlphTypeSigned()
+{
+ return keyOps->isSigned;
+}
+
+bool GoCodeGen::isWideAlphTypeSigned()
+{
+ string ret;
+ if ( redFsm->maxKey <= keyOps->maxKey )
+ return isAlphTypeSigned();
+ else {
+ long long maxKeyVal = redFsm->maxKey.getLongLong();
+ HostType *wideType = keyOps->typeSubsumes( keyOps->isSigned, maxKeyVal );
+ return wideType->isSigned;
+ }
+}
+
+string GoCodeGen::WIDE_KEY( RedStateAp *state, Key key )
+{
+ if ( state->stateCondList.length() > 0 ) {
+ ostringstream ret;
+ if ( isWideAlphTypeSigned() )
+ ret << key.getVal();
+ else
+ ret << (unsigned long) key.getVal() << 'u';
+ return ret.str();
+ }
+ else {
+ return KEY( key );
+ }
+}
+
+
+
+void GoCodeGen::EXEC( ostream &ret, GenInlineItem *item, int targState, int inFinish )
+{
+ /* The parser gives fexec two children. The double brackets are for D
+ * code. If the inline list is a single word it will get interpreted as a
+ * C-style cast by the D compiler. */
+ ret << P() << " = (";
+ INLINE_LIST( ret, item->children, targState, inFinish, false );
+ ret << ") - 1" << endl;
+}
+
+void GoCodeGen::LM_SWITCH( ostream &ret, GenInlineItem *item,
+ int targState, int inFinish, bool csForced )
+{
+ ret <<
+ " switch " << ACT() << " {" << endl;
+
+ for ( GenInlineList::Iter lma = *item->children; lma.lte(); lma++ ) {
+ /* Write the case label, the action and the case break. */
+ if ( lma->lmId < 0 ) {
+ ret << " default:" << endl;
+ }
+ else
+ ret << " case " << lma->lmId << ":" << endl;
+
+ /* Write the block and close it off. */
+ ret << " {";
+ INLINE_LIST( ret, lma->children, targState, inFinish, csForced );
+ ret << "}" << endl;
+ }
+
+ ret <<
+ " }" << endl <<
+ " ";
+}
+
+void GoCodeGen::SET_ACT( ostream &ret, GenInlineItem *item )
+{
+ ret << ACT() << " = " << item->lmId << ";";
+}
+
+void GoCodeGen::SET_TOKEND( ostream &ret, GenInlineItem *item )
+{
+ /* The tokend action sets tokend. */
+ ret << TOKEND() << " = " << P();
+ if ( item->offset != 0 )
+ out << "+" << item->offset;
+ out << endl;
+}
+
+void GoCodeGen::GET_TOKEND( ostream &ret, GenInlineItem *item )
+{
+ ret << TOKEND();
+}
+
+void GoCodeGen::INIT_TOKSTART( ostream &ret, GenInlineItem *item )
+{
+ ret << TOKSTART() << " = " << NULL_ITEM() << endl;
+}
+
+void GoCodeGen::INIT_ACT( ostream &ret, GenInlineItem *item )
+{
+ ret << ACT() << " = 0" << endl;
+}
+
+void GoCodeGen::SET_TOKSTART( ostream &ret, GenInlineItem *item )
+{
+ ret << TOKSTART() << " = " << P() << endl;
+}
+
+void GoCodeGen::SUB_ACTION( ostream &ret, GenInlineItem *item,
+ int targState, bool inFinish, bool csForced )
+{
+ if ( item->children->length() > 0 ) {
+ /* Write the block and close it off. */
+ ret << "{";
+ INLINE_LIST( ret, item->children, targState, inFinish, csForced );
+ ret << "}";
+ }
+}
+
+
+/* Write out an inline tree structure. Walks the list and possibly calls out
+ * to virtual functions than handle language specific items in the tree. */
+void GoCodeGen::INLINE_LIST( ostream &ret, GenInlineList *inlineList,
+ int targState, bool inFinish, bool csForced )
+{
+ for ( GenInlineList::Iter item = *inlineList; item.lte(); item++ ) {
+ switch ( item->type ) {
+ case GenInlineItem::Text:
+ ret << item->data;
+ break;
+ case GenInlineItem::Goto:
+ GOTO( ret, item->targState->id, inFinish );
+ break;
+ case GenInlineItem::Call:
+ CALL( ret, item->targState->id, targState, inFinish );
+ break;
+ case GenInlineItem::Next:
+ NEXT( ret, item->targState->id, inFinish );
+ break;
+ case GenInlineItem::Ret:
+ RET( ret, inFinish );
+ break;
+ case GenInlineItem::PChar:
+ ret << P();
+ break;
+ case GenInlineItem::Char:
+ ret << GET_KEY();
+ break;
+ case GenInlineItem::Hold:
+ ret << P() << "--" << endl;
+ break;
+ case GenInlineItem::Exec:
+ EXEC( ret, item, targState, inFinish );
+ break;
+ case GenInlineItem::Curs:
+ CURS( ret, inFinish );
+ break;
+ case GenInlineItem::Targs:
+ TARGS( ret, inFinish, targState );
+ break;
+ case GenInlineItem::Entry:
+ ret << item->targState->id;
+ break;
+ case GenInlineItem::GotoExpr:
+ GOTO_EXPR( ret, item, inFinish );
+ break;
+ case GenInlineItem::CallExpr:
+ CALL_EXPR( ret, item, targState, inFinish );
+ break;
+ case GenInlineItem::NextExpr:
+ NEXT_EXPR( ret, item, inFinish );
+ break;
+ case GenInlineItem::LmSwitch:
+ LM_SWITCH( ret, item, targState, inFinish, csForced );
+ break;
+ case GenInlineItem::LmSetActId:
+ SET_ACT( ret, item );
+ break;
+ case GenInlineItem::LmSetTokEnd:
+ SET_TOKEND( ret, item );
+ break;
+ case GenInlineItem::LmGetTokEnd:
+ GET_TOKEND( ret, item );
+ break;
+ case GenInlineItem::LmInitTokStart:
+ INIT_TOKSTART( ret, item );
+ break;
+ case GenInlineItem::LmInitAct:
+ INIT_ACT( ret, item );
+ break;
+ case GenInlineItem::LmSetTokStart:
+ SET_TOKSTART( ret, item );
+ break;
+ case GenInlineItem::SubAction:
+ SUB_ACTION( ret, item, targState, inFinish, csForced );
+ break;
+ case GenInlineItem::Break:
+ BREAK( ret, targState, csForced );
+ break;
+ }
+ }
+}
+/* Write out paths in line directives. Escapes any special characters. */
+string GoCodeGen::LDIR_PATH( char *path )
+{
+ ostringstream ret;
+ for ( char *pc = path; *pc != 0; pc++ ) {
+ if ( *pc == '\\' )
+ ret << "\\\\";
+ else
+ ret << *pc;
+ }
+ return ret.str();
+}
+
+void GoCodeGen::ACTION( ostream &ret, GenAction *action, int targState,
+ bool inFinish, bool csForced )
+{
+ /* Write the preprocessor line info for going into the source file. */
+ goLineDirective( ret, action->loc.fileName, action->loc.line );
+
+ /* Write the block and close it off. */
+ ret << endl;
+ INLINE_LIST( ret, action->inlineList, targState, inFinish, csForced );
+ ret << endl;
+}
+
+void GoCodeGen::CONDITION( ostream &ret, GenAction *condition )
+{
+ INLINE_LIST( ret, condition->inlineList, 0, false, false );
+}
+
+string GoCodeGen::ERROR_STATE()
+{
+ ostringstream ret;
+ if ( redFsm->errState != 0 )
+ ret << redFsm->errState->id;
+ else
+ ret << "-1";
+ return ret.str();
+}
+
+string GoCodeGen::FIRST_FINAL_STATE()
+{
+ ostringstream ret;
+ if ( redFsm->firstFinState != 0 )
+ ret << redFsm->firstFinState->id;
+ else
+ ret << redFsm->nextStateId;
+ return ret.str();
+}
+
+void GoCodeGen::writeInit()
+{
+ out << " {" << endl;
+
+ if ( !noCS )
+ out << " " << vCS() << " = " << START() << endl;
+
+ /* If there are any calls, then the stack top needs initialization. */
+ if ( redFsm->anyActionCalls() || redFsm->anyActionRets() )
+ out << " " << TOP() << " = 0" << endl;
+
+ if ( hasLongestMatch ) {
+ out <<
+ " " << TOKSTART() << " = " << NULL_ITEM() << endl <<
+ " " << TOKEND() << " = " << NULL_ITEM() << endl <<
+ " " << ACT() << " = 0" << endl;
+ }
+ out << " }" << endl;
+}
+
+string GoCodeGen::DATA()
+{
+ ostringstream ret;
+ if ( dataExpr == 0 )
+ ret << ACCESS() + "data";
+ else {
+ ret << "(";
+ INLINE_LIST( ret, dataExpr, 0, false, false );
+ ret << ")";
+ }
+ return ret.str();
+}
+
+string GoCodeGen::DATA_PREFIX()
+{
+ if ( !noPrefix )
+ return FSM_NAME() + "_";
+ return "";
+}
+
+/* Emit the alphabet data type. */
+string GoCodeGen::ALPH_TYPE()
+{
+ string ret = keyOps->alphType->data1;
+ if ( keyOps->alphType->data2 != 0 ) {
+ ret += " ";
+ ret += + keyOps->alphType->data2;
+ }
+ return ret;
+}
+
+/* Emit the alphabet data type. */
+string GoCodeGen::WIDE_ALPH_TYPE()
+{
+ string ret;
+ if ( redFsm->maxKey <= keyOps->maxKey )
+ ret = ALPH_TYPE();
+ else {
+ long long maxKeyVal = redFsm->maxKey.getLongLong();
+ HostType *wideType = keyOps->typeSubsumes( keyOps->isSigned, maxKeyVal );
+ assert( wideType != 0 );
+
+ ret = wideType->data1;
+ if ( wideType->data2 != 0 ) {
+ ret += " ";
+ ret += wideType->data2;
+ }
+ }
+ return ret;
+}
+
+void GoCodeGen::STATE_IDS()
+{
+ if ( redFsm->startState != 0 )
+ CONST( "int", START() ) << " = " << START_STATE_ID() << endl;
+
+ if ( !noFinal )
+ CONST( "int" , FIRST_FINAL() ) << " = " << FIRST_FINAL_STATE() << endl;
+
+ if ( !noError )
+ CONST( "int", ERROR() ) << " = " << ERROR_STATE() << endl;
+
+ out << endl;
+
+ if ( entryPointNames.length() > 0 ) {
+ for ( EntryNameVect::Iter en = entryPointNames; en.lte(); en++ ) {
+ CONST( "int", DATA_PREFIX() + "en_" + *en ) <<
+ " = " << entryPointIds[en.pos()] << endl;
+ }
+ out << endl;
+ }
+}
+
+void GoCodeGen::writeStart()
+{
+ out << START_STATE_ID();
+}
+
+void GoCodeGen::writeFirstFinal()
+{
+ out << FIRST_FINAL_STATE();
+}
+
+void GoCodeGen::writeError()
+{
+ out << ERROR_STATE();
+}
+
+void GoCodeGen::finishRagelDef()
+{
+ if ( codeStyle == GenGoto || codeStyle == GenFGoto ||
+ codeStyle == GenIpGoto || codeStyle == GenSplit )
+ {
+ /* For directly executable machines there is no required state
+ * ordering. Choose a depth-first ordering to increase the
+ * potential for fall-throughs. */
+ redFsm->depthFirstOrdering();
+ }
+ else {
+ /* The frontend will do this for us, but it may be a good idea to
+ * force it if the intermediate file is edited. */
+ redFsm->sortByStateId();
+ }
+
+ /* Choose default transitions and the single transition. */
+ redFsm->chooseDefaultSpan();
+
+ /* Maybe do flat expand, otherwise choose single. */
+ if ( codeStyle == GenFlat || codeStyle == GenFFlat )
+ redFsm->makeFlat();
+ else
+ redFsm->chooseSingle();
+
+ /* If any errors have occured in the input file then don't write anything. */
+ if ( gblErrorCount > 0 )
+ return;
+
+ if ( codeStyle == GenSplit )
+ redFsm->partitionFsm( numSplitPartitions );
+
+ if ( codeStyle == GenIpGoto || codeStyle == GenSplit )
+ redFsm->setInTrans();
+
+ /* Anlayze Machine will find the final action reference counts, among
+ * other things. We will use these in reporting the usage
+ * of fsm directives in action code. */
+ analyzeMachine();
+
+ /* Determine if we should use indicies. */
+ calcIndexSize();
+}
+
+ostream &GoCodeGen::source_warning( const InputLoc &loc )
+{
+ cerr << sourceFileName << ":" << loc.line << ":" << loc.col << ": warning: ";
+ return cerr;
+}
+
+ostream &GoCodeGen::source_error( const InputLoc &loc )
+{
+ gblErrorCount += 1;
+ assert( sourceFileName != 0 );
+ cerr << sourceFileName << ":" << loc.line << ":" << loc.col << ": ";
+ return cerr;
+}
+
+
+/*
+ * Go implementation.
+ *
+ */
+
+std::ostream &GoCodeGen::OPEN_ARRAY( string type, string name )
+{
+ out << "var " << name << " []" << type << " = []" << type << "{" << endl;
+ return out;
+}
+
+std::ostream &GoCodeGen::CLOSE_ARRAY()
+{
+ return out << "}" << endl;
+}
+
+std::ostream &GoCodeGen::STATIC_VAR( string type, string name )
+{
+ out << "var " << name << " " << type;
+ return out;
+}
+
+std::ostream &GoCodeGen::CONST( string type, string name )
+{
+ out << "const " << name << " " << type;
+ return out;
+}
+
+string GoCodeGen::UINT( )
+{
+ return "uint";
+}
+
+string GoCodeGen::INT()
+{
+ return "int";
+}
+
+string GoCodeGen::CAST( string type, string expr )
+{
+ return type + "(" + expr + ")";
+}
+
+string GoCodeGen::NULL_ITEM()
+{
+ return "0";
+}
+
+void GoCodeGen::writeExports()
+{
+ if ( exportList.length() > 0 ) {
+ for ( ExportList::Iter ex = exportList; ex.lte(); ex++ ) {
+ out << "const " << DATA_PREFIX() << "ex_" << ex->name << " = " <<
+ KEY(ex->key) << endl;
+ }
+ out << endl;
+ }
+}
diff --git a/ragel/gocodegen.h b/ragel/gocodegen.h
new file mode 100644
index 0000000..50e8804
--- /dev/null
+++ b/ragel/gocodegen.h
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _GOCODEGEN_H
+#define _GOCODEGEN_H
+
+#include <iostream>
+#include <string>
+#include <stdio.h>
+#include "common.h"
+#include "gendata.h"
+
+using std::string;
+using std::ostream;
+
+/* Integer array line length. */
+#define IALL 8
+
+/* Forwards. */
+struct RedFsmAp;
+struct RedStateAp;
+struct CodeGenData;
+struct GenAction;
+struct NameInst;
+struct GenInlineItem;
+struct GenInlineList;
+struct RedAction;
+struct LongestMatch;
+struct LongestMatchPart;
+
+class GoCodeGen : public CodeGenData
+{
+public:
+ GoCodeGen( ostream &out )
+ : CodeGenData(out) {}
+
+ virtual ~GoCodeGen() {}
+
+ virtual void finishRagelDef();
+ virtual void writeInit();
+ virtual void writeStart();
+ virtual void writeFirstFinal();
+ virtual void writeError();
+ virtual void writeExports();
+protected:
+ string FSM_NAME();
+ string START_STATE_ID();
+ ostream &ACTIONS_ARRAY();
+ string GET_WIDE_KEY();
+ string GET_WIDE_KEY( RedStateAp *state );
+ string TABS( int level );
+ string KEY( Key key );
+ string WIDE_KEY( RedStateAp *state, Key key );
+ string LDIR_PATH( char *path );
+ virtual void ACTION( ostream &ret, GenAction *action, int targState,
+ bool inFinish, bool csForced );
+ void CONDITION( ostream &ret, GenAction *condition );
+ string ALPH_TYPE();
+ string WIDE_ALPH_TYPE();
+ string ARRAY_TYPE( unsigned long maxVal );
+
+ bool isAlphTypeSigned();
+ bool isWideAlphTypeSigned();
+
+ virtual string CAST( string type, string expr );
+ virtual string UINT();
+ virtual string INT();
+ virtual string NULL_ITEM();
+ virtual string GET_KEY();
+
+ string P();
+ string PE();
+ string vEOF();
+
+ string ACCESS();
+ string vCS();
+ string STACK();
+ string TOP();
+ string TOKSTART();
+ string TOKEND();
+ string ACT();
+ string DATA();
+
+ string DATA_PREFIX();
+ string PM() { return "_" + DATA_PREFIX() + "partition_map"; }
+ string C() { return "_" + DATA_PREFIX() + "cond_spaces"; }
+ string CK() { return "_" + DATA_PREFIX() + "cond_keys"; }
+ string K() { return "_" + DATA_PREFIX() + "trans_keys"; }
+ string I() { return "_" + DATA_PREFIX() + "indicies"; }
+ string CO() { return "_" + DATA_PREFIX() + "cond_offsets"; }
+ string KO() { return "_" + DATA_PREFIX() + "key_offsets"; }
+ string IO() { return "_" + DATA_PREFIX() + "index_offsets"; }
+ string CL() { return "_" + DATA_PREFIX() + "cond_lengths"; }
+ string SL() { return "_" + DATA_PREFIX() + "single_lengths"; }
+ string RL() { return "_" + DATA_PREFIX() + "range_lengths"; }
+ string A() { return "_" + DATA_PREFIX() + "actions"; }
+ string TA() { return "_" + DATA_PREFIX() + "trans_actions"; }
+ string TT() { return "_" + DATA_PREFIX() + "trans_targs"; }
+ string TSA() { return "_" + DATA_PREFIX() + "to_state_actions"; }
+ string FSA() { return "_" + DATA_PREFIX() + "from_state_actions"; }
+ string EA() { return "_" + DATA_PREFIX() + "eof_actions"; }
+ string ET() { return "_" + DATA_PREFIX() + "eof_trans"; }
+ string SP() { return "_" + DATA_PREFIX() + "key_spans"; }
+ string CSP() { return "_" + DATA_PREFIX() + "cond_key_spans"; }
+ string START() { return DATA_PREFIX() + "start"; }
+ string ERROR() { return DATA_PREFIX() + "error"; }
+ string FIRST_FINAL() { return DATA_PREFIX() + "first_final"; }
+ string CTXDATA() { return DATA_PREFIX() + "ctxdata"; }
+
+ void INLINE_LIST( ostream &ret, GenInlineList *inlineList,
+ int targState, bool inFinish, bool csForced );
+ virtual void GOTO( ostream &ret, int gotoDest, bool inFinish ) = 0;
+ virtual void CALL( ostream &ret, int callDest, int targState, bool inFinish ) = 0;
+ virtual void NEXT( ostream &ret, int nextDest, bool inFinish ) = 0;
+ virtual void GOTO_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish ) = 0;
+ virtual void NEXT_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish ) = 0;
+ virtual void CALL_EXPR( ostream &ret, GenInlineItem *ilItem,
+ int targState, bool inFinish ) = 0;
+ virtual void RET( ostream &ret, bool inFinish ) = 0;
+ virtual void BREAK( ostream &ret, int targState, bool csForced ) = 0;
+ virtual void CURS( ostream &ret, bool inFinish ) = 0;
+ virtual void TARGS( ostream &ret, bool inFinish, int targState ) = 0;
+ void EXEC( ostream &ret, GenInlineItem *item, int targState, int inFinish );
+ void LM_SWITCH( ostream &ret, GenInlineItem *item, int targState,
+ int inFinish, bool csForced );
+ void SET_ACT( ostream &ret, GenInlineItem *item );
+ void INIT_TOKSTART( ostream &ret, GenInlineItem *item );
+ void INIT_ACT( ostream &ret, GenInlineItem *item );
+ void SET_TOKSTART( ostream &ret, GenInlineItem *item );
+ void SET_TOKEND( ostream &ret, GenInlineItem *item );
+ void GET_TOKEND( ostream &ret, GenInlineItem *item );
+ virtual void SUB_ACTION( ostream &ret, GenInlineItem *item,
+ int targState, bool inFinish, bool csForced );
+ void STATE_IDS();
+
+ string ERROR_STATE();
+ string FIRST_FINAL_STATE();
+
+ virtual ostream &OPEN_ARRAY( string type, string name );
+ virtual ostream &CLOSE_ARRAY();
+ virtual ostream &STATIC_VAR( string type, string name );
+ virtual ostream &CONST( string type, string name );
+
+ ostream &source_warning(const InputLoc &loc);
+ ostream &source_error(const InputLoc &loc);
+
+ unsigned int arrayTypeSize( unsigned long maxVal );
+
+ bool outLabelUsed;
+ bool testEofUsed;
+ bool againLabelUsed;
+ bool useIndicies;
+
+ void genLineDirective( ostream &out );
+
+public:
+ /* Determine if we should use indicies. */
+ virtual void calcIndexSize() {}
+};
+
+#endif
diff --git a/ragel/gofflat.cpp b/ragel/gofflat.cpp
new file mode 100644
index 0000000..59e729c
--- /dev/null
+++ b/ragel/gofflat.cpp
@@ -0,0 +1,380 @@
+/*
+ * Copyright 2004-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "ragel.h"
+#include "gofflat.h"
+#include "redfsm.h"
+#include "gendata.h"
+
+using std::endl;
+
+std::ostream &GoFFlatCodeGen::TO_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->toStateAction != 0 )
+ act = state->toStateAction->actListId+1;
+ out << act;
+ return out;
+}
+
+std::ostream &GoFFlatCodeGen::FROM_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->fromStateAction != 0 )
+ act = state->fromStateAction->actListId+1;
+ out << act;
+ return out;
+}
+
+std::ostream &GoFFlatCodeGen::EOF_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->eofAction != 0 )
+ act = state->eofAction->actListId+1;
+ out << act;
+ return out;
+}
+
+/* Write out the function for a transition. */
+std::ostream &GoFFlatCodeGen::TRANS_ACTION( RedTransAp *trans )
+{
+ int action = 0;
+ if ( trans->action != 0 )
+ action = trans->action->actListId+1;
+ out << action;
+ return out;
+}
+
+/* Write out the function switch. This switch is keyed on the values
+ * of the func index. */
+std::ostream &GoFFlatCodeGen::TO_STATE_ACTION_SWITCH( int level )
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numToStateRefs > 0 ) {
+ /* Write the entry label. */
+ out << TABS(level) << "case " << redAct->actListId+1 << ":" << endl;
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, false, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+/* Write out the function switch. This switch is keyed on the values
+ * of the func index. */
+std::ostream &GoFFlatCodeGen::FROM_STATE_ACTION_SWITCH( int level )
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numFromStateRefs > 0 ) {
+ /* Write the entry label. */
+ out << TABS(level) << "case " << redAct->actListId+1 << ":" << endl;
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, false, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &GoFFlatCodeGen::EOF_ACTION_SWITCH( int level )
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numEofRefs > 0 ) {
+ /* Write the entry label. */
+ out << TABS(level) << "case " << redAct->actListId+1 << ":" << endl;
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, true, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+/* Write out the function switch. This switch is keyed on the values
+ * of the func index. */
+std::ostream &GoFFlatCodeGen::ACTION_SWITCH( int level )
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numTransRefs > 0 ) {
+ /* Write the entry label. */
+ out << TABS(level) << "case " << redAct->actListId+1 << ":" << endl;
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, false, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+void GoFFlatCodeGen::writeData()
+{
+ if ( redFsm->anyConditions() ) {
+ OPEN_ARRAY( WIDE_ALPH_TYPE(), CK() );
+ COND_KEYS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondSpan), CSP() );
+ COND_KEY_SPANS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCond), C() );
+ CONDS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondIndexOffset), CO() );
+ COND_INDEX_OFFSET();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ OPEN_ARRAY( WIDE_ALPH_TYPE(), K() );
+ KEYS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxSpan), SP() );
+ KEY_SPANS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxFlatIndexOffset), IO() );
+ FLAT_INDEX_OFFSET();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndex), I() );
+ INDICIES();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxState), TT() );
+ TRANS_TARGS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActListId), TA() );
+ TRANS_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ if ( redFsm->anyToStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), TSA() );
+ TO_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ if ( redFsm->anyFromStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), FSA() );
+ FROM_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActListId), EA() );
+ EOF_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ if ( redFsm->anyEofTrans() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndexOffset+1), ET() );
+ EOF_TRANS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ STATE_IDS();
+}
+
+void GoFFlatCodeGen::writeExec()
+{
+ testEofUsed = false;
+ outLabelUsed = false;
+
+ out <<
+ " {" << endl <<
+ " var _slen " << INT() << endl;
+
+ if ( redFsm->anyRegCurStateRef() )
+ out << " var _ps " << INT() << endl;
+
+ out << " var _trans " << INT() << endl;
+
+ if ( redFsm->anyConditions() )
+ out << " var _cond " << INT() << endl;
+
+ out <<
+ " var _keys " << INT() << endl <<
+ " var _inds " << INT() << endl;
+
+ if ( redFsm->anyConditions() ) {
+ out <<
+ " var _conds " << INT() << endl <<
+ " var _widec " << WIDE_ALPH_TYPE() << endl;
+ }
+
+ if ( !noEnd ) {
+ testEofUsed = true;
+ out <<
+ " if " << P() << " == " << PE() << " {" << endl <<
+ " goto _test_eof" << endl <<
+ " }" << endl;
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " if " << vCS() << " == " << redFsm->errState->id << " {" << endl <<
+ " goto _out" << endl <<
+ " }" << endl;
+ }
+
+ out << "_resume:" << endl;
+
+ if ( redFsm->anyFromStateActions() ) {
+ out <<
+ " switch " << FSA() << "[" << vCS() << "] {" << endl;
+ FROM_STATE_ACTION_SWITCH(1);
+ out <<
+ " }" << endl <<
+ endl;
+ }
+
+ if ( redFsm->anyConditions() )
+ COND_TRANSLATE();
+
+ LOCATE_TRANS();
+
+ if ( redFsm->anyEofTrans() )
+ out << "_eof_trans:" << endl;
+
+ if ( redFsm->anyRegCurStateRef() )
+ out << " _ps = " << vCS() << endl;
+
+ out <<
+ " " << vCS() << " = " << CAST(INT(), TT() + "[_trans]") << endl <<
+ endl;
+
+ if ( redFsm->anyRegActions() ) {
+ out <<
+ " if " << TA() << "[_trans] == 0 {" << endl <<
+ " goto _again" << endl <<
+ " }" << endl <<
+ endl <<
+ " switch " << TA() << "[_trans] {" << endl;
+ ACTION_SWITCH(1);
+ out <<
+ " }" << endl <<
+ endl;
+ }
+
+ if ( redFsm->anyRegActions() || redFsm->anyActionGotos() ||
+ redFsm->anyActionCalls() || redFsm->anyActionRets() )
+ out << "_again:" << endl;
+
+ if ( redFsm->anyToStateActions() ) {
+ out <<
+ " switch " << TSA() << "[" << vCS() << "] {" << endl;
+ TO_STATE_ACTION_SWITCH(1);
+ out <<
+ " }" << endl <<
+ endl;
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " if " << vCS() << " == " << redFsm->errState->id << " {" << endl <<
+ " goto _out" << endl <<
+ " }" << endl;
+ }
+
+ if ( !noEnd ) {
+ out <<
+ " if " << P() << "++; " << P() << " != " << PE() << " {"
+ " goto _resume" << endl <<
+ " }" << endl;
+ }
+ else {
+ out <<
+ " " << P() << "++" << endl <<
+ " goto _resume" << endl;
+ }
+
+ if ( testEofUsed )
+ out << " _test_eof: {}" << endl;
+
+ if ( redFsm->anyEofTrans() || redFsm->anyEofActions() ) {
+ out <<
+ " if " << P() << " == " << vEOF() << " {" << endl;
+
+ if ( redFsm->anyEofTrans() ) {
+ out <<
+ " if " << ET() << "[" << vCS() << "] > 0 {" << endl <<
+ " _trans = " << CAST(INT(), ET() + "[" + vCS() + "] - 1") << endl <<
+ " goto _eof_trans" << endl <<
+ " }" << endl;
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ out <<
+ " switch " << EA() << "[" << vCS() << "] {" << endl;
+ EOF_ACTION_SWITCH(2);
+ out <<
+ " }" << endl;
+ }
+
+ out <<
+ " }" << endl <<
+ endl;
+ }
+
+ if ( outLabelUsed )
+ out << " _out: {}" << endl;
+
+ out << " }" << endl;
+}
diff --git a/ragel/gofflat.h b/ragel/gofflat.h
new file mode 100644
index 0000000..bd3bde4
--- /dev/null
+++ b/ragel/gofflat.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2004-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _GOFFLAT_H
+#define _GOFFLAT_H
+
+#include <iostream>
+#include "goflat.h"
+
+/* Forwards. */
+struct CodeGenData;
+
+/*
+ * FFlatCodeGen
+ */
+class GoFFlatCodeGen
+ : public GoFlatCodeGen
+{
+public:
+ GoFFlatCodeGen( ostream &out )
+ : GoFlatCodeGen(out) {}
+
+protected:
+ std::ostream &TO_STATE_ACTION_SWITCH( int level );
+ std::ostream &FROM_STATE_ACTION_SWITCH( int level );
+ std::ostream &EOF_ACTION_SWITCH( int level );
+ std::ostream &ACTION_SWITCH( int level );
+
+ virtual std::ostream &TO_STATE_ACTION( RedStateAp *state );
+ virtual std::ostream &FROM_STATE_ACTION( RedStateAp *state );
+ virtual std::ostream &EOF_ACTION( RedStateAp *state );
+ virtual std::ostream &TRANS_ACTION( RedTransAp *trans );
+
+ virtual void writeData();
+ virtual void writeExec();
+};
+
+#endif
diff --git a/ragel/gofgoto.cpp b/ragel/gofgoto.cpp
new file mode 100644
index 0000000..4f6ce36
--- /dev/null
+++ b/ragel/gofgoto.cpp
@@ -0,0 +1,297 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "ragel.h"
+#include "gofgoto.h"
+#include "redfsm.h"
+#include "gendata.h"
+#include "bstmap.h"
+
+using std::endl;
+
+std::ostream &GoFGotoCodeGen::EXEC_ACTIONS()
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numTransRefs > 0 ) {
+ /* We are at the start of a glob, write the case. */
+ out << "f" << redAct->actListId << ":" << endl;
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, false, false );
+
+ out << TABS(1) << "goto _again" << endl;
+ }
+ }
+ return out;
+}
+
+/* Write out the function switch. This switch is keyed on the values
+ * of the func index. */
+std::ostream &GoFGotoCodeGen::TO_STATE_ACTION_SWITCH( int level )
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numToStateRefs > 0 ) {
+ /* Write the entry label. */
+ out << TABS(level) << "case " << redAct->actListId+1 << ":" << endl;
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, false, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+/* Write out the function switch. This switch is keyed on the values
+ * of the func index. */
+std::ostream &GoFGotoCodeGen::FROM_STATE_ACTION_SWITCH( int level )
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numFromStateRefs > 0 ) {
+ /* Write the entry label. */
+ out << TABS(level) << "case " << redAct->actListId+1 << ":" << endl;
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, false, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &GoFGotoCodeGen::EOF_ACTION_SWITCH( int level )
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numEofRefs > 0 ) {
+ /* Write the entry label. */
+ out << TABS(level) << "case " << redAct->actListId+1 << ":" << endl;
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, true, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+
+std::ostream &GoFGotoCodeGen::FINISH_CASES()
+{
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* States that are final and have an out action need a case. */
+ if ( st->eofAction != 0 ) {
+ /* Write the case label. */
+ out << TABS(2) << "case " << st->id << ":" << endl;
+
+ /* Jump to the func. */
+ out << TABS(3) << "goto f" << st->eofAction->actListId << endl;
+ }
+ }
+
+ return out;
+}
+
+unsigned int GoFGotoCodeGen::TO_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->toStateAction != 0 )
+ act = state->toStateAction->actListId+1;
+ return act;
+}
+
+unsigned int GoFGotoCodeGen::FROM_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->fromStateAction != 0 )
+ act = state->fromStateAction->actListId+1;
+ return act;
+}
+
+unsigned int GoFGotoCodeGen::EOF_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->eofAction != 0 )
+ act = state->eofAction->actListId+1;
+ return act;
+}
+
+void GoFGotoCodeGen::writeData()
+{
+ if ( redFsm->anyToStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), TSA() );
+ TO_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ if ( redFsm->anyFromStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), FSA() );
+ FROM_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), EA() );
+ EOF_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ STATE_IDS();
+}
+
+void GoFGotoCodeGen::writeExec()
+{
+ testEofUsed = false;
+ outLabelUsed = false;
+
+ out << " {" << endl;
+
+ if ( redFsm->anyRegCurStateRef() )
+ out << " var _ps " << INT() << " = 0" << endl;
+
+ if ( redFsm->anyConditions() )
+ out << " var _widec " << WIDE_ALPH_TYPE() << endl;
+
+ if ( !noEnd ) {
+ testEofUsed = true;
+ out <<
+ " if " << P() << " == " << PE() << " {" << endl <<
+ " goto _test_eof" << endl <<
+ " }" << endl;
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " if " << vCS() << " == " << redFsm->errState->id << " {" << endl <<
+ " goto _out" << endl <<
+ " }" << endl;
+ }
+
+ out << "_resume:" << endl;
+
+ if ( redFsm->anyFromStateActions() ) {
+ out <<
+ " switch " << FSA() << "[" << vCS() << "] {" << endl;
+ FROM_STATE_ACTION_SWITCH(1);
+ out <<
+ " }" << endl <<
+ endl;
+ }
+
+ out <<
+ " switch " << vCS() << " {" << endl;
+ STATE_GOTOS(1);
+ out <<
+ " }" << endl <<
+ endl;
+ TRANSITIONS() <<
+ endl;
+
+ if ( redFsm->anyRegActions() )
+ EXEC_ACTIONS() << endl;
+
+ out << "_again:" << endl;
+
+ if ( redFsm->anyToStateActions() ) {
+ out <<
+ " switch " << TSA() << "[" << vCS() << "] {" << endl;
+ TO_STATE_ACTION_SWITCH(1);
+ out <<
+ " }" << endl <<
+ endl;
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " if " << vCS() << " == " << redFsm->errState->id << " {" << endl <<
+ " goto _out" << endl <<
+ " }" << endl;
+ }
+
+ if ( !noEnd ) {
+ out <<
+ " if " << P() << "++; " << P() << " != " << PE() << " {" << endl <<
+ " goto _resume" << endl <<
+ " }" << endl;
+ }
+ else {
+ out <<
+ " " << P() << "++" << endl <<
+ " goto _resume" << endl;
+ }
+
+ if ( testEofUsed )
+ out << " _test_eof: {}" << endl;
+
+ if ( redFsm->anyEofTrans() || redFsm->anyEofActions() ) {
+ out <<
+ " if " << P() << " == " << vEOF() << " {" << endl;
+
+ if ( redFsm->anyEofTrans() ) {
+ out <<
+ " switch " << vCS() << " {" << endl;
+
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ if ( st->eofTrans != 0 )
+ out <<
+ " case " << st->id << ":" << endl <<
+ " goto tr" << st->eofTrans->id << endl;
+ }
+
+ out <<
+ " }" << endl;
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ out <<
+ " switch " << EA() << "[" << vCS() << "] {" << endl;
+ EOF_ACTION_SWITCH(2);
+ out <<
+ " }" << endl;
+ }
+
+ out <<
+ " }" << endl <<
+ endl;
+ }
+
+ if ( outLabelUsed )
+ out << " _out: {}" << endl;
+
+ out << " }" << endl;
+}
diff --git a/ragel/gofgoto.h b/ragel/gofgoto.h
new file mode 100644
index 0000000..c53e450
--- /dev/null
+++ b/ragel/gofgoto.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _GOFGOTO_H
+#define _GOFGOTO_H
+
+#include <iostream>
+#include "gogoto.h"
+
+/* Forwards. */
+struct CodeGenData;
+
+
+class GoFGotoCodeGen
+ : public GoGotoCodeGen
+{
+public:
+ GoFGotoCodeGen( ostream &out )
+ : GoGotoCodeGen(out) {}
+
+ std::ostream &EXEC_ACTIONS();
+ std::ostream &TO_STATE_ACTION_SWITCH( int level );
+ std::ostream &FROM_STATE_ACTION_SWITCH( int level );
+ std::ostream &FINISH_CASES();
+ std::ostream &EOF_ACTION_SWITCH( int level );
+ unsigned int TO_STATE_ACTION( RedStateAp *state );
+ unsigned int FROM_STATE_ACTION( RedStateAp *state );
+ unsigned int EOF_ACTION( RedStateAp *state );
+
+ virtual void writeData();
+ virtual void writeExec();
+};
+
+#endif
diff --git a/ragel/goflat.cpp b/ragel/goflat.cpp
new file mode 100644
index 0000000..bc7f51c
--- /dev/null
+++ b/ragel/goflat.cpp
@@ -0,0 +1,764 @@
+/*
+ * Copyright 2004-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "ragel.h"
+#include "goflat.h"
+#include "redfsm.h"
+#include "gendata.h"
+
+using std::endl;
+
+std::ostream &GoFlatCodeGen::TO_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->toStateAction != 0 )
+ act = state->toStateAction->location+1;
+ out << act;
+ return out;
+}
+
+std::ostream &GoFlatCodeGen::FROM_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->fromStateAction != 0 )
+ act = state->fromStateAction->location+1;
+ out << act;
+ return out;
+}
+
+std::ostream &GoFlatCodeGen::EOF_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->eofAction != 0 )
+ act = state->eofAction->location+1;
+ out << act;
+ return out;
+}
+
+std::ostream &GoFlatCodeGen::TRANS_ACTION( RedTransAp *trans )
+{
+ /* If there are actions, emit them. Otherwise emit zero. */
+ int act = 0;
+ if ( trans->action != 0 )
+ act = trans->action->location+1;
+ out << act;
+ return out;
+}
+
+std::ostream &GoFlatCodeGen::TO_STATE_ACTION_SWITCH( int level )
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numToStateRefs > 0 ) {
+ /* Write the case label, the action and the case break */
+ out << TABS(level) << "case " << act->actionId << ":" << endl;
+ ACTION( out, act, 0, false, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &GoFlatCodeGen::FROM_STATE_ACTION_SWITCH( int level )
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numFromStateRefs > 0 ) {
+ /* Write the case label, the action and the case break */
+ out << TABS(level) << "case " << act->actionId << ":" << endl;
+ ACTION( out, act, 0, false, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &GoFlatCodeGen::EOF_ACTION_SWITCH( int level )
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numEofRefs > 0 ) {
+ /* Write the case label, the action and the case break */
+ out << TABS(level) << "case " << act->actionId << ":" << endl;
+ ACTION( out, act, 0, true, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+
+std::ostream &GoFlatCodeGen::ACTION_SWITCH( int level )
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numTransRefs > 0 ) {
+ /* Write the case label, the action and the case break */
+ out << TABS(level) << "case " << act->actionId << ":" << endl;
+ ACTION( out, act, 0, false, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+
+std::ostream &GoFlatCodeGen::FLAT_INDEX_OFFSET()
+{
+ out << " ";
+ int totalStateNum = 0, curIndOffset = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write the index offset. */
+ out << curIndOffset << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+
+ /* Move the index offset ahead. */
+ if ( st->transList != 0 )
+ curIndOffset += keyOps->span( st->lowKey, st->highKey );
+
+ if ( st->defTrans != 0 )
+ curIndOffset += 1;
+ }
+ out << endl;
+ return out;
+}
+
+std::ostream &GoFlatCodeGen::KEY_SPANS()
+{
+ out << " ";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write singles length. */
+ unsigned long long span = 0;
+ if ( st->transList != 0 )
+ span = keyOps->span( st->lowKey, st->highKey );
+ out << span << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ return out;
+}
+
+std::ostream &GoFlatCodeGen::TO_STATE_ACTIONS()
+{
+ out << " ";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write any eof action. */
+ TO_STATE_ACTION(st);
+ out << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ return out;
+}
+
+std::ostream &GoFlatCodeGen::FROM_STATE_ACTIONS()
+{
+ out << " ";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write any eof action. */
+ FROM_STATE_ACTION(st);
+ out << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ return out;
+}
+
+std::ostream &GoFlatCodeGen::EOF_ACTIONS()
+{
+ out << " ";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write any eof action. */
+ EOF_ACTION(st);
+ out << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ return out;
+}
+
+std::ostream &GoFlatCodeGen::EOF_TRANS()
+{
+ out << " ";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write any eof action. */
+
+ long trans = 0;
+ if ( st->eofTrans != 0 ) {
+ assert( st->eofTrans->pos >= 0 );
+ trans = st->eofTrans->pos+1;
+ }
+ out << trans << ", ";
+
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ return out;
+}
+
+
+std::ostream &GoFlatCodeGen::COND_KEYS()
+{
+ out << " ";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Emit just cond low key and cond high key. */
+ out << KEY( st->condLowKey ) << ", ";
+ out << KEY( st->condHighKey ) << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+
+ out << endl;
+ return out;
+}
+
+std::ostream &GoFlatCodeGen::COND_KEY_SPANS()
+{
+ out << " ";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write singles length. */
+ unsigned long long span = 0;
+ if ( st->condList != 0 )
+ span = keyOps->span( st->condLowKey, st->condHighKey );
+ out << span << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ return out;
+}
+
+std::ostream &GoFlatCodeGen::CONDS()
+{
+ out << " ";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ if ( st->condList != 0 ) {
+ /* Walk the singles. */
+ unsigned long long span = keyOps->span( st->condLowKey, st->condHighKey );
+ for ( unsigned long long pos = 0; pos < span; pos++ ) {
+ if ( st->condList[pos] != 0 )
+ out << st->condList[pos]->condSpaceId + 1 << ", ";
+ else
+ out << "0, ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ }
+ }
+
+ out << endl;
+ return out;
+}
+
+std::ostream &GoFlatCodeGen::COND_INDEX_OFFSET()
+{
+ out << " ";
+ int totalStateNum = 0;
+ int curIndOffset = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write the index offset. */
+ out << curIndOffset << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+
+ /* Move the index offset ahead. */
+ if ( st->condList != 0 )
+ curIndOffset += keyOps->span( st->condLowKey, st->condHighKey );
+ }
+ out << endl;
+ return out;
+}
+
+
+std::ostream &GoFlatCodeGen::KEYS()
+{
+ out << " ";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Emit just low key and high key. */
+ out << KEY( st->lowKey ) << ", ";
+ out << KEY( st->highKey ) << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+
+ out << endl;
+ return out;
+}
+
+std::ostream &GoFlatCodeGen::INDICIES()
+{
+ out << " ";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ if ( st->transList != 0 ) {
+ /* Walk the singles. */
+ unsigned long long span = keyOps->span( st->lowKey, st->highKey );
+ for ( unsigned long long pos = 0; pos < span; pos++ ) {
+ out << st->transList[pos]->id << ", ";
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+
+ /* The state's default index goes next. */
+ if ( st->defTrans != 0 ) {
+ out << st->defTrans->id << ", ";
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+
+ out << endl;
+ return out;
+}
+
+std::ostream &GoFlatCodeGen::TRANS_TARGS()
+{
+ /* Transitions must be written ordered by their id. */
+ RedTransAp **transPtrs = new RedTransAp*[redFsm->transSet.length()];
+ for ( TransApSet::Iter trans = redFsm->transSet; trans.lte(); trans++ )
+ transPtrs[trans->id] = trans;
+
+ /* Keep a count of the num of items in the array written. */
+ out << " ";
+ int totalStates = 0;
+ for ( int t = 0; t < redFsm->transSet.length(); t++ ) {
+ /* Save the position. Needed for eofTargs. */
+ RedTransAp *trans = transPtrs[t];
+ trans->pos = t;
+
+ /* Write out the target state. */
+ out << trans->targ->id << ", ";
+ if ( t < redFsm->transSet.length()-1 ) {
+ if ( ++totalStates % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ delete[] transPtrs;
+ return out;
+}
+
+
+std::ostream &GoFlatCodeGen::TRANS_ACTIONS()
+{
+ /* Transitions must be written ordered by their id. */
+ RedTransAp **transPtrs = new RedTransAp*[redFsm->transSet.length()];
+ for ( TransApSet::Iter trans = redFsm->transSet; trans.lte(); trans++ )
+ transPtrs[trans->id] = trans;
+
+ /* Keep a count of the num of items in the array written. */
+ out << " ";
+ int totalAct = 0;
+ for ( int t = 0; t < redFsm->transSet.length(); t++ ) {
+ /* Write the function for the transition. */
+ RedTransAp *trans = transPtrs[t];
+ TRANS_ACTION( trans );
+ out << ", ";
+ if ( t < redFsm->transSet.length()-1 ) {
+ if ( ++totalAct % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ delete[] transPtrs;
+ return out;
+}
+
+void GoFlatCodeGen::LOCATE_TRANS()
+{
+ out <<
+ " _keys = " << CAST(INT(), vCS() + " << 1") << endl <<
+ " _inds = " << CAST(INT(), IO() + "[" + vCS() + "]") << endl <<
+ endl <<
+ " _slen = " << CAST(INT(), SP() + "[" + vCS() + "]") << endl <<
+ " if _slen > 0 && " << K() << "[_keys] <= " << GET_WIDE_KEY() << " && " <<
+ GET_WIDE_KEY() << " <= " << K() << "[_keys + 1]" << " {" << endl <<
+ " _trans = " << CAST(INT(), I() + "[_inds + " + CAST(INT(), GET_WIDE_KEY() + " - " + K() + "[_keys]") + "]") << endl <<
+ " } else {" << endl <<
+ " _trans = " << CAST(INT(), I() + "[_inds + _slen]") << endl <<
+ " }" << endl <<
+ endl;
+}
+
+void GoFlatCodeGen::writeData()
+{
+ /* If there are any transtion functions then output the array. If there
+ * are none, don't bother emitting an empty array that won't be used. */
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActArrItem), A() );
+ ACTIONS_ARRAY();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ if ( redFsm->anyConditions() ) {
+ OPEN_ARRAY( WIDE_ALPH_TYPE(), CK() );
+ COND_KEYS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondSpan), CSP() );
+ COND_KEY_SPANS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCond), C() );
+ CONDS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondIndexOffset), CO() );
+ COND_INDEX_OFFSET();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ OPEN_ARRAY( WIDE_ALPH_TYPE(), K() );
+ KEYS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxSpan), SP() );
+ KEY_SPANS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxFlatIndexOffset), IO() );
+ FLAT_INDEX_OFFSET();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndex), I() );
+ INDICIES();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxState), TT() );
+ TRANS_TARGS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), TA() );
+ TRANS_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ if ( redFsm->anyToStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), TSA() );
+ TO_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ if ( redFsm->anyFromStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), FSA() );
+ FROM_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), EA() );
+ EOF_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ if ( redFsm->anyEofTrans() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndexOffset+1), ET() );
+ EOF_TRANS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ STATE_IDS();
+}
+
+void GoFlatCodeGen::COND_TRANSLATE()
+{
+ out <<
+ " _widec = " << CAST(WIDE_ALPH_TYPE(), GET_KEY()) << endl;
+
+ out <<
+ " _keys = " << CAST(INT(), vCS() + " << 1") << endl <<
+ " _conds = " << CAST(INT(), CO() + "[" + vCS() + "]") << endl <<
+ endl <<
+ " _slen = " << CAST(INT(), CSP() + "[" + vCS() + "]") << endl <<
+ " if _slen > 0 && " << CK() << "[_keys]" << " <= " << GET_WIDE_KEY() << " && " <<
+ GET_WIDE_KEY() << " <= " << CK() << "[_keys + 1] {" << endl <<
+ " _cond = " << CAST(INT(), C() + "[_conds + " + CAST(INT(), GET_WIDE_KEY() + " - " + CK() + "[_keys]") + "]") << endl <<
+ " } else {" << endl <<
+ " _cond = 0" << endl <<
+ " }" << endl <<
+ endl;
+
+ out <<
+ " switch _cond {" << endl;
+ for ( CondSpaceList::Iter csi = condSpaceList; csi.lte(); csi++ ) {
+ GenCondSpace *condSpace = csi;
+ out << " case " << condSpace->condSpaceId + 1 << ":" << endl;
+ out << TABS(2) << "_widec = " <<
+ KEY(condSpace->baseKey) << " + (" << CAST(WIDE_ALPH_TYPE(), GET_KEY()) <<
+ " - " << KEY(keyOps->minKey) << ")" << endl;
+
+ for ( GenCondSet::Iter csi = condSpace->condSet; csi.lte(); csi++ ) {
+ out << TABS(2) << "if ";
+ CONDITION( out, *csi );
+ Size condValOffset = ((1 << csi.pos()) * keyOps->alphSize());
+ out << " {" << endl <<
+ " _widec += " << condValOffset << endl <<
+ " }" << endl;
+ }
+ }
+
+ out <<
+ " }" << endl;
+}
+
+void GoFlatCodeGen::writeExec()
+{
+ testEofUsed = false;
+ outLabelUsed = false;
+
+ out <<
+ " {" << endl <<
+ " var _slen " << INT() << endl;
+
+ if ( redFsm->anyRegCurStateRef() )
+ out << " var _ps " << INT() << endl;
+
+ out <<
+ " var _trans " << INT() << endl;
+
+ if ( redFsm->anyConditions() )
+ out << " var _cond " << INT() << endl;
+
+ if ( redFsm->anyToStateActions() ||
+ redFsm->anyRegActions() || redFsm->anyFromStateActions() )
+ {
+ out <<
+ " var _acts " << INT() << endl <<
+ " var _nacts " << UINT() << endl;
+ }
+
+ out <<
+ " var _keys " << INT() << endl <<
+ " var _inds " << INT() << endl;
+
+ if ( redFsm->anyConditions() ) {
+ out <<
+ " var _conds " << INT() << endl <<
+ " var _widec " << WIDE_ALPH_TYPE() << endl;
+ }
+
+ out << endl;
+
+ if ( !noEnd ) {
+ testEofUsed = true;
+ out <<
+ " if " << P() << " == " << PE() << " {" << endl <<
+ " goto _test_eof" << endl <<
+ " }" << endl;
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " if " << vCS() << " == " << redFsm->errState->id << " {" << endl <<
+ " goto _out" << endl <<
+ " }" << endl;
+ }
+
+ out << "_resume:" << endl;
+
+ if ( redFsm->anyFromStateActions() ) {
+ out <<
+ " _acts = " << CAST(INT(), FSA() + "[" + vCS() + "]") << endl <<
+ " _nacts = " << CAST(UINT(), A() + "[_acts]") << "; _acts++" << endl <<
+ " for ; _nacts > 0; _nacts-- {" << endl <<
+ " _acts++" << endl <<
+ " switch " << A() << "[_acts - 1]" << " {" << endl;
+ FROM_STATE_ACTION_SWITCH(2);
+ out <<
+ " }" << endl <<
+ " }" << endl <<
+ endl;
+ }
+
+ if ( redFsm->anyConditions() )
+ COND_TRANSLATE();
+
+ LOCATE_TRANS();
+
+ if ( redFsm->anyEofTrans() )
+ out << "_eof_trans:" << endl;
+
+ if ( redFsm->anyRegCurStateRef() )
+ out << " _ps = " << vCS() << endl;
+
+ out <<
+ " " << vCS() << " = " << CAST(INT(), TT() + "[_trans]") << endl <<
+ endl;
+
+ if ( redFsm->anyRegActions() ) {
+ out <<
+ " if " << TA() << "[_trans] == 0 {" << endl <<
+ " goto _again" << endl <<
+ " }" << endl <<
+ endl <<
+ " _acts = " << CAST(INT(), TA() + "[_trans]") << endl <<
+ " _nacts = " << CAST(UINT(), A() + "[_acts]") << "; _acts++" << endl <<
+ " for ; _nacts > 0; _nacts-- {" << endl <<
+ " _acts++" << endl <<
+ " switch " << A() << "[_acts - 1]" << " {" << endl;
+ ACTION_SWITCH(2);
+ out <<
+ " }" << endl <<
+ " }" << endl <<
+ endl;
+ }
+
+ if ( redFsm->anyRegActions() || redFsm->anyActionGotos() ||
+ redFsm->anyActionCalls() || redFsm->anyActionRets() )
+ out << "_again:" << endl;
+
+ if ( redFsm->anyToStateActions() ) {
+ out <<
+ " _acts = " << CAST(INT(), TSA() + "[" + vCS() + "]") << endl <<
+ " _nacts = " << CAST(UINT(), A() + "[_acts]") << "; _acts++" << endl <<
+ " for ; _nacts > 0; _nacts-- {" << endl <<
+ " _acts++" << endl <<
+ " switch " << A() << "[_acts - 1]" << " {" << endl;
+ TO_STATE_ACTION_SWITCH(2);
+ out <<
+ " }" << endl <<
+ " }" << endl <<
+ endl;
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " if " << vCS() << " == " << redFsm->errState->id << " {" << endl <<
+ " goto _out" << endl <<
+ " }" << endl;
+ }
+
+ if ( !noEnd ) {
+ out <<
+ " if " << P() << "++; " << P() << " != " << PE() << " {" << endl <<
+ " goto _resume" << endl <<
+ " }" << endl;
+ }
+ else {
+ out <<
+ " " << P() << "++" << endl <<
+ " goto _resume" << endl;
+ }
+
+ if ( testEofUsed )
+ out << " _test_eof: {}" << endl;
+
+ if ( redFsm->anyEofTrans() || redFsm->anyEofActions() ) {
+ out <<
+ " if " << P() << " == " << vEOF() << " {" << endl;
+
+ if ( redFsm->anyEofTrans() ) {
+ out <<
+ " if " << ET() << "[" << vCS() << "] > 0 {" << endl <<
+ " _trans = " << CAST(INT(), ET() + "[" + vCS() + "] - 1") << endl <<
+ " goto _eof_trans" << endl <<
+ " }" << endl;
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ out <<
+ " __acts := " << CAST(INT(), EA() + "[" + vCS() + "]") << endl <<
+ " __nacts := " << CAST(UINT(), A() + "[__acts]") << "; __acts++" << endl <<
+ " for ; __nacts > 0; __nacts-- {" << endl <<
+ " __acts++" << endl <<
+ " switch " << A() << "[__acts - 1]" << " {" << endl;
+ EOF_ACTION_SWITCH(3);
+ out <<
+ " }" << endl <<
+ " }" << endl;
+ }
+
+ out <<
+ " }" << endl <<
+ endl;
+ }
+
+ if ( outLabelUsed )
+ out << " _out: {}" << endl;
+
+ out << " }" << endl;
+}
diff --git a/ragel/goflat.h b/ragel/goflat.h
new file mode 100644
index 0000000..5216e85
--- /dev/null
+++ b/ragel/goflat.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2004-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _GOFLAT_H
+#define _GOFLAT_H
+
+#include <iostream>
+#include "gotablish.h"
+
+/* Forwards. */
+struct CodeGenData;
+struct NameInst;
+struct RedTransAp;
+struct RedStateAp;
+
+/*
+ * GoFlatCodeGen
+ */
+class GoFlatCodeGen
+ : public GoTablishCodeGen
+{
+public:
+ GoFlatCodeGen( ostream &out )
+ : GoTablishCodeGen(out) {}
+
+ virtual ~GoFlatCodeGen() { }
+
+protected:
+ std::ostream &TO_STATE_ACTION_SWITCH( int level );
+ std::ostream &FROM_STATE_ACTION_SWITCH( int level );
+ std::ostream &EOF_ACTION_SWITCH( int level );
+ std::ostream &ACTION_SWITCH( int level );
+ std::ostream &KEYS();
+ std::ostream &INDICIES();
+ std::ostream &FLAT_INDEX_OFFSET();
+ std::ostream &KEY_SPANS();
+ std::ostream &TO_STATE_ACTIONS();
+ std::ostream &FROM_STATE_ACTIONS();
+ std::ostream &EOF_ACTIONS();
+ std::ostream &EOF_TRANS();
+ std::ostream &TRANS_TARGS();
+ std::ostream &TRANS_ACTIONS();
+ void LOCATE_TRANS();
+
+ std::ostream &COND_INDEX_OFFSET();
+ void COND_TRANSLATE();
+ std::ostream &CONDS();
+ std::ostream &COND_KEYS();
+ std::ostream &COND_KEY_SPANS();
+
+ virtual std::ostream &TO_STATE_ACTION( RedStateAp *state );
+ virtual std::ostream &FROM_STATE_ACTION( RedStateAp *state );
+ virtual std::ostream &EOF_ACTION( RedStateAp *state );
+ virtual std::ostream &TRANS_ACTION( RedTransAp *trans );
+
+ virtual void writeData();
+ virtual void writeExec();
+};
+
+#endif
diff --git a/ragel/goftable.cpp b/ragel/goftable.cpp
new file mode 100644
index 0000000..318f878
--- /dev/null
+++ b/ragel/goftable.cpp
@@ -0,0 +1,441 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "ragel.h"
+#include "goftable.h"
+#include "redfsm.h"
+#include "gendata.h"
+
+using std::endl;
+
+/* Determine if we should use indicies or not. */
+void GoFTabCodeGen::calcIndexSize()
+{
+ int sizeWithInds = 0, sizeWithoutInds = 0;
+
+ /* Calculate cost of using with indicies. */
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ int totalIndex = st->outSingle.length() + st->outRange.length() +
+ (st->defTrans == 0 ? 0 : 1);
+ sizeWithInds += arrayTypeSize(redFsm->maxIndex) * totalIndex;
+ }
+ sizeWithInds += arrayTypeSize(redFsm->maxState) * redFsm->transSet.length();
+ if ( redFsm->anyActions() )
+ sizeWithInds += arrayTypeSize(redFsm->maxActListId) * redFsm->transSet.length();
+
+ /* Calculate the cost of not using indicies. */
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ int totalIndex = st->outSingle.length() + st->outRange.length() +
+ (st->defTrans == 0 ? 0 : 1);
+ sizeWithoutInds += arrayTypeSize(redFsm->maxState) * totalIndex;
+ if ( redFsm->anyActions() )
+ sizeWithoutInds += arrayTypeSize(redFsm->maxActListId) * totalIndex;
+ }
+
+ /* If using indicies reduces the size, use them. */
+ useIndicies = sizeWithInds < sizeWithoutInds;
+}
+
+std::ostream &GoFTabCodeGen::TO_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->toStateAction != 0 )
+ act = state->toStateAction->actListId+1;
+ out << act;
+ return out;
+}
+
+std::ostream &GoFTabCodeGen::FROM_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->fromStateAction != 0 )
+ act = state->fromStateAction->actListId+1;
+ out << act;
+ return out;
+}
+
+std::ostream &GoFTabCodeGen::EOF_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->eofAction != 0 )
+ act = state->eofAction->actListId+1;
+ out << act;
+ return out;
+}
+
+
+/* Write out the function for a transition. */
+std::ostream &GoFTabCodeGen::TRANS_ACTION( RedTransAp *trans )
+{
+ int action = 0;
+ if ( trans->action != 0 )
+ action = trans->action->actListId+1;
+ out << action;
+ return out;
+}
+
+/* Write out the function switch. This switch is keyed on the values
+ * of the func index. */
+std::ostream &GoFTabCodeGen::TO_STATE_ACTION_SWITCH( int level )
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numToStateRefs > 0 ) {
+ /* Write the entry label. */
+ out << TABS(level) << "case " << redAct->actListId+1 << ":" << endl;
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, false, false );
+
+ out << endl;
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+/* Write out the function switch. This switch is keyed on the values
+ * of the func index. */
+std::ostream &GoFTabCodeGen::FROM_STATE_ACTION_SWITCH( int level )
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numFromStateRefs > 0 ) {
+ /* Write the entry label. */
+ out << TABS(level) << "case " << redAct->actListId+1 << ":" << endl;
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, false, false );
+
+ out << endl;
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &GoFTabCodeGen::EOF_ACTION_SWITCH( int level )
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numEofRefs > 0 ) {
+ /* Write the entry label. */
+ out << TABS(level) << "case " << redAct->actListId+1 << ":" << endl;
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, true, false );
+
+ out << endl;
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+/* Write out the function switch. This switch is keyed on the values
+ * of the func index. */
+std::ostream &GoFTabCodeGen::ACTION_SWITCH( int level )
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numTransRefs > 0 ) {
+ /* Write the entry label. */
+ out << TABS(level) << "case " << redAct->actListId+1 << ":" << endl;
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, false, false );
+
+ out << endl;
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+void GoFTabCodeGen::writeData()
+{
+ if ( redFsm->anyConditions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondOffset), CO() );
+ COND_OFFSETS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondLen), CL() );
+ COND_LENS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( WIDE_ALPH_TYPE(), CK() );
+ COND_KEYS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondSpaceId), C() );
+ COND_SPACES();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxKeyOffset), KO() );
+ KEY_OFFSETS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( WIDE_ALPH_TYPE(), K() );
+ KEYS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxSingleLen), SL() );
+ SINGLE_LENS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxRangeLen), RL() );
+ RANGE_LENS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndexOffset), IO() );
+ INDEX_OFFSETS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ if ( useIndicies ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndex), I() );
+ INDICIES();
+ CLOSE_ARRAY() <<
+ endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxState), TT() );
+ TRANS_TARGS_WI();
+ CLOSE_ARRAY() <<
+ endl;
+
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActListId), TA() );
+ TRANS_ACTIONS_WI();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+ }
+ else {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxState), TT() );
+ TRANS_TARGS();
+ CLOSE_ARRAY() <<
+ endl;
+
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActListId), TA() );
+ TRANS_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+ }
+
+ if ( redFsm->anyToStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), TSA() );
+ TO_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ if ( redFsm->anyFromStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), FSA() );
+ FROM_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActListId), EA() );
+ EOF_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ if ( redFsm->anyEofTrans() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndexOffset+1), ET() );
+ EOF_TRANS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ STATE_IDS();
+}
+
+void GoFTabCodeGen::writeExec()
+{
+ testEofUsed = false;
+ outLabelUsed = false;
+
+ out <<
+ " {" << endl <<
+ " var _klen " << INT() << endl;
+
+ if ( redFsm->anyRegCurStateRef() )
+ out << " var _ps " << INT() << endl;
+
+ out <<
+ " var _keys " << INT() << endl <<
+ " var _trans " << INT() << endl;
+
+ if ( redFsm->anyConditions() )
+ out << " var _widec " << WIDE_ALPH_TYPE() << endl;
+
+ out << endl;
+
+ if ( !noEnd ) {
+ testEofUsed = true;
+ out <<
+ " if " << P() << " == " << PE() << " {" << endl <<
+ " goto _test_eof" << endl <<
+ " }" << endl;
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " if " << vCS() << " == " << redFsm->errState->id << " {" << endl <<
+ " goto _out" << endl <<
+ " }" << endl;
+ }
+
+ out << "_resume:" << endl;
+
+ if ( redFsm->anyFromStateActions() ) {
+ out <<
+ " switch " << FSA() << "[" << vCS() << "] {" << endl;
+ FROM_STATE_ACTION_SWITCH(1);
+ out <<
+ " }" << endl <<
+ endl;
+ }
+
+ if ( redFsm->anyConditions() )
+ COND_TRANSLATE();
+
+ LOCATE_TRANS();
+
+ out << "_match:" << endl;
+
+ if ( useIndicies )
+ out << " _trans = " << CAST(INT(), I() + "[_trans]") << endl;
+
+ if ( redFsm->anyEofTrans() )
+ out << "_eof_trans:" << endl;
+
+ if ( redFsm->anyRegCurStateRef() )
+ out << " _ps = " << vCS() << endl;
+
+ out <<
+ " " << vCS() << " = " << CAST(INT(), TT() + "[_trans]") << endl <<
+ endl;
+
+ if ( redFsm->anyRegActions() ) {
+ out <<
+ " if " << TA() << "[_trans] == 0 {" << endl <<
+ " goto _again" << endl <<
+ " }" << endl <<
+ endl <<
+ " switch " << TA() << "[_trans] {" << endl;
+ ACTION_SWITCH(1);
+ out <<
+ " }" << endl <<
+ endl;
+ }
+
+ if ( redFsm->anyRegActions() || redFsm->anyActionGotos() ||
+ redFsm->anyActionCalls() || redFsm->anyActionRets() )
+ out << "_again:" << endl;
+
+ if ( redFsm->anyToStateActions() ) {
+ out <<
+ " switch " << TSA() << "[" << vCS() << "] {" << endl;
+ TO_STATE_ACTION_SWITCH(1);
+ out <<
+ " }" << endl <<
+ endl;
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " if " << vCS() << " == " << redFsm->errState->id << " {" << endl <<
+ " goto _out" << endl <<
+ " }" << endl;
+ }
+
+ if ( !noEnd ) {
+ out <<
+ " if " << P() << "++; " << P() << " != " << PE() << " {" << endl <<
+ " goto _resume" << endl <<
+ " }" << endl;
+ }
+ else {
+ out <<
+ " " << P() << "++" << endl <<
+ " goto _resume" << endl;
+ }
+
+ if ( testEofUsed )
+ out << " _test_eof: {}" << endl;
+
+ if ( redFsm->anyEofTrans() || redFsm->anyEofActions() ) {
+ out <<
+ " if " << P() << " == " << vEOF() << " {" << endl;
+
+ if ( redFsm->anyEofTrans() ) {
+ out <<
+ " if " << ET() << "[" << vCS() << "] > 0 {" << endl <<
+ " _trans = " << CAST(INT(), ET() + "[" + vCS() + "] - 1") << endl <<
+ " goto _eof_trans" << endl <<
+ " }" << endl;
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ out <<
+ " switch " << EA() << "[" << vCS() << "] {" << endl;
+ EOF_ACTION_SWITCH(2);
+ out <<
+ " }" << endl;
+ }
+
+ out <<
+ " }" << endl <<
+ endl;
+ }
+
+ if ( outLabelUsed )
+ out << " _out: {}" << endl;
+
+ out << " }" << endl;
+}
diff --git a/ragel/goftable.h b/ragel/goftable.h
new file mode 100644
index 0000000..524b6a2
--- /dev/null
+++ b/ragel/goftable.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _GOFTABLE_H
+#define _GOFTABLE_H
+
+#include <iostream>
+#include "gotable.h"
+
+/* Forwards. */
+struct CodeGenData;
+
+/*
+ * GoFTabCode
+ */
+class GoFTabCodeGen
+ : public GoTabCodeGen
+{
+public:
+ GoFTabCodeGen( ostream &out )
+ : GoTabCodeGen(out) {}
+
+protected:
+ std::ostream &TO_STATE_ACTION_SWITCH( int level );
+ std::ostream &FROM_STATE_ACTION_SWITCH( int level );
+ std::ostream &EOF_ACTION_SWITCH( int level );
+ std::ostream &ACTION_SWITCH( int level );
+
+ virtual std::ostream &TO_STATE_ACTION( RedStateAp *state );
+ virtual std::ostream &FROM_STATE_ACTION( RedStateAp *state );
+ virtual std::ostream &EOF_ACTION( RedStateAp *state );
+ virtual std::ostream &TRANS_ACTION( RedTransAp *trans );
+
+ virtual void writeData();
+ virtual void writeExec();
+ virtual void calcIndexSize();
+};
+
+#endif
diff --git a/ragel/gogoto.cpp b/ragel/gogoto.cpp
new file mode 100644
index 0000000..757308a
--- /dev/null
+++ b/ragel/gogoto.cpp
@@ -0,0 +1,734 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "ragel.h"
+#include "gogoto.h"
+#include "redfsm.h"
+#include "bstmap.h"
+#include "gendata.h"
+
+using std::endl;
+
+/* Emit the goto to take for a given transition. */
+std::ostream &GoGotoCodeGen::TRANS_GOTO( RedTransAp *trans, int level )
+{
+ out << TABS(level) << "goto tr" << trans->id << ";";
+ return out;
+}
+
+int GoGotoCodeGen::TRANS_NR( RedTransAp *trans )
+{
+ return trans->id;
+}
+
+std::ostream &GoGotoCodeGen::TO_STATE_ACTION_SWITCH( int level )
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numToStateRefs > 0 ) {
+ /* Write the case label, the action and the case break. */
+ out << TABS(level) << "case " << act->actionId << ":" << endl;
+ ACTION( out, act, 0, false, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &GoGotoCodeGen::FROM_STATE_ACTION_SWITCH( int level )
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numFromStateRefs > 0 ) {
+ /* Write the case label, the action and the case break. */
+ out << TABS(level) << "case " << act->actionId << ":" << endl;
+ ACTION( out, act, 0, false, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &GoGotoCodeGen::EOF_ACTION_SWITCH( int level )
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numEofRefs > 0 ) {
+ /* Write the case label, the action and the case break. */
+ out << TABS(level) << "case " << act->actionId << ":" << endl;
+ ACTION( out, act, 0, true, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &GoGotoCodeGen::ACTION_SWITCH( int level )
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numTransRefs > 0 ) {
+ /* Write the case label, the action and the case break. */
+ out << TABS(level) << "case " << act->actionId << ":" << endl;
+ ACTION( out, act, 0, false, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+void GoGotoCodeGen::GOTO_HEADER( RedStateAp *state, int level )
+{
+ /* Label the state. */
+ out << TABS(level) << "case " << state->id << ":" << endl;
+}
+
+void GoGotoCodeGen::emitSingleSwitch( RedStateAp *state, int level )
+{
+ /* Load up the singles. */
+ int numSingles = state->outSingle.length();
+ RedTransEl *data = state->outSingle.data;
+
+ if ( numSingles == 1 ) {
+ /* If there is a single single key then write it out as an if. */
+ out << TABS(level) << "if " << GET_WIDE_KEY(state) << " == " <<
+ WIDE_KEY(state, data[0].lowKey) << " {" << endl;
+
+ /* Virtual function for writing the target of the transition. */
+ TRANS_GOTO(data[0].value, level + 1) << endl;
+ out << TABS(level) << "}" << endl;
+ }
+ else if ( numSingles > 1 ) {
+ /* Write out single keys in a switch if there is more than one. */
+ out << TABS(level) << "switch " << GET_WIDE_KEY(state) << " {" << endl;
+
+ /* Write out the single indicies. */
+ for ( int j = 0; j < numSingles; j++ ) {
+ out << TABS(level) << "case " << WIDE_KEY(state, data[j].lowKey) << ":" << endl;
+ TRANS_GOTO(data[j].value, level + 1) << endl;
+ }
+
+ /* Close off the transition switch. */
+ out << TABS(level) << "}" << endl;
+ }
+}
+
+void GoGotoCodeGen::emitRangeBSearch( RedStateAp *state, int level, int low, int high )
+{
+ /* Get the mid position, staying on the lower end of the range. */
+ int mid = (low + high) >> 1;
+ RedTransEl *data = state->outRange.data;
+
+ /* Determine if we need to look higher or lower. */
+ bool anyLower = mid > low;
+ bool anyHigher = mid < high;
+
+ /* Determine if the keys at mid are the limits of the alphabet. */
+ bool limitLow = data[mid].lowKey == keyOps->minKey;
+ bool limitHigh = data[mid].highKey == keyOps->maxKey;
+
+ if ( anyLower && anyHigher ) {
+ /* Can go lower and higher than mid. */
+ out << TABS(level) << "switch {" << endl;
+ out << TABS(level) << "case " << GET_WIDE_KEY(state) << " < " <<
+ WIDE_KEY(state, data[mid].lowKey) << ":" << endl;
+ emitRangeBSearch( state, level+1, low, mid-1 );
+ out << TABS(level) << "case " << GET_WIDE_KEY(state) << " > " <<
+ WIDE_KEY(state, data[mid].highKey) << ":" << endl;
+ emitRangeBSearch( state, level+1, mid+1, high );
+ out << TABS(level) << "default:" << endl;
+ TRANS_GOTO(data[mid].value, level+1) << endl;
+ out << TABS(level) << "}" << endl;
+ }
+ else if ( anyLower && !anyHigher ) {
+ /* Can go lower than mid but not higher. */
+ out << TABS(level) << "switch {" << endl;
+ out << TABS(level) << "case " << GET_WIDE_KEY(state) << " < " <<
+ WIDE_KEY(state, data[mid].lowKey) << ":" << endl;
+ emitRangeBSearch( state, level+1, low, mid-1 );
+
+ /* if the higher is the highest in the alphabet then there is no
+ * sense testing it. */
+ if ( limitHigh ) {
+ out << TABS(level) << "default:" << endl;
+ TRANS_GOTO(data[mid].value, level+1) << endl;
+ }
+ else {
+ out << TABS(level) << "case " << GET_WIDE_KEY(state) << " <= " <<
+ WIDE_KEY(state, data[mid].highKey) << ":" << endl;
+ TRANS_GOTO(data[mid].value, level+1) << endl;
+ }
+ out << TABS(level) << "}" << endl;
+ }
+ else if ( !anyLower && anyHigher ) {
+ /* Can go higher than mid but not lower. */
+ out << TABS(level) << "switch {" << endl;
+ out << TABS(level) << "case " << GET_WIDE_KEY(state) << " > " <<
+ WIDE_KEY(state, data[mid].highKey) << ":" << endl;
+ emitRangeBSearch( state, level+1, mid+1, high );
+
+ /* If the lower end is the lowest in the alphabet then there is no
+ * sense testing it. */
+ if ( limitLow ) {
+ out << TABS(level) << "default:" << endl;
+ TRANS_GOTO(data[mid].value, level+1) << endl;
+ }
+ else {
+ out << TABS(level) << "case " << GET_WIDE_KEY(state) << " >= " <<
+ WIDE_KEY(state, data[mid].lowKey) << ":" << endl;
+ TRANS_GOTO(data[mid].value, level+1) << endl;
+ }
+ out << TABS(level) << "}" << endl;
+ }
+ else {
+ /* Cannot go higher or lower than mid. It's mid or bust. What
+ * tests to do depends on limits of alphabet. */
+ if ( !limitLow && !limitHigh ) {
+ out << TABS(level) << "if " << WIDE_KEY(state, data[mid].lowKey) << " <= " <<
+ GET_WIDE_KEY(state) << " && " << GET_WIDE_KEY(state) << " <= " <<
+ WIDE_KEY(state, data[mid].highKey) << " {" << endl;
+ TRANS_GOTO(data[mid].value, level+1) << endl;
+ out << TABS(level) << "}" << endl;
+ }
+ else if ( limitLow && !limitHigh ) {
+ out << TABS(level) << "if " << GET_WIDE_KEY(state) << " <= " <<
+ WIDE_KEY(state, data[mid].highKey) << " {" << endl;
+ TRANS_GOTO(data[mid].value, level+1) << endl;
+ out << TABS(level) << "}" << endl;
+ }
+ else if ( !limitLow && limitHigh ) {
+ out << TABS(level) << "if " << WIDE_KEY(state, data[mid].lowKey) << " <= " <<
+ GET_WIDE_KEY(state) << " {" << endl;
+ TRANS_GOTO(data[mid].value, level+1) << endl;
+ out << TABS(level) << "}" << endl;
+ }
+ else {
+ /* Both high and low are at the limit. No tests to do. */
+ TRANS_GOTO(data[mid].value, level) << endl;
+ }
+ }
+}
+
+void GoGotoCodeGen::STATE_GOTO_ERROR( int level )
+{
+ /* Label the state and bail immediately. */
+ outLabelUsed = true;
+ RedStateAp *state = redFsm->errState;
+ out << TABS(level) << "case " << state->id << ":" << endl;
+ out << TABS(level + 1) << "goto _out" << endl;
+}
+
+void GoGotoCodeGen::COND_TRANSLATE( GenStateCond *stateCond, int level )
+{
+ GenCondSpace *condSpace = stateCond->condSpace;
+ out << TABS(level) << "_widec = " <<
+ KEY(condSpace->baseKey) << " + (" << CAST(WIDE_ALPH_TYPE(), GET_KEY()) <<
+ " - " << KEY(keyOps->minKey) << ")" << endl;
+
+ for ( GenCondSet::Iter csi = condSpace->condSet; csi.lte(); csi++ ) {
+ out << TABS(level) << "if ";
+ CONDITION( out, *csi );
+ Size condValOffset = ((1 << csi.pos()) * keyOps->alphSize());
+ out << " {" << endl;
+ out << TABS(level + 1) << "_widec += " << condValOffset << endl;
+ out << TABS(level) << "}" << endl;
+ }
+}
+
+void GoGotoCodeGen::emitCondBSearch( RedStateAp *state, int level, int low, int high )
+{
+ /* Get the mid position, staying on the lower end of the range. */
+ int mid = (low + high) >> 1;
+ GenStateCond **data = state->stateCondVect.data;
+
+ /* Determine if we need to look higher or lower. */
+ bool anyLower = mid > low;
+ bool anyHigher = mid < high;
+
+ /* Determine if the keys at mid are the limits of the alphabet. */
+ bool limitLow = data[mid]->lowKey == keyOps->minKey;
+ bool limitHigh = data[mid]->highKey == keyOps->maxKey;
+
+ if ( anyLower && anyHigher ) {
+ /* Can go lower and higher than mid. */
+ out << TABS(level) << "switch {" << endl;
+ out << TABS(level) << "case " << GET_KEY() << " < " <<
+ KEY(data[mid]->lowKey) << ":" << endl;
+ emitCondBSearch( state, level+1, low, mid-1 );
+ out << TABS(level) << "case " << GET_KEY() << " > " <<
+ KEY(data[mid]->highKey) << ":" << endl;
+ emitCondBSearch( state, level+1, mid+1, high );
+ out << TABS(level) << "default:" << endl;
+ COND_TRANSLATE(data[mid], level+1);
+ out << TABS(level) << "}" << endl;
+ }
+ else if ( anyLower && !anyHigher ) {
+ /* Can go lower than mid but not higher. */
+ out << TABS(level) << "switch {" << endl;
+ out << TABS(level) << "case " << GET_KEY() << " < " <<
+ KEY(data[mid]->lowKey) << ":" << endl;
+ emitCondBSearch( state, level+1, low, mid-1 );
+
+ /* if the higher is the highest in the alphabet then there is no
+ * sense testing it. */
+ if ( limitHigh ) {
+ out << TABS(level) << "default:" << endl;
+ COND_TRANSLATE(data[mid], level+1);
+ }
+ else {
+ out << TABS(level) << "case " << GET_KEY() << " <= " <<
+ KEY(data[mid]->highKey) << ":" << endl;
+ COND_TRANSLATE(data[mid], level+1);
+ }
+ out << TABS(level) << "}" << endl;
+ }
+ else if ( !anyLower && anyHigher ) {
+ /* Can go higher than mid but not lower. */
+ out << TABS(level) << "switch {" << endl;
+ out << TABS(level) << "case " << GET_KEY() << " > " <<
+ KEY(data[mid]->highKey) << ":" << endl;
+ emitCondBSearch( state, level+1, mid+1, high );
+
+ /* If the lower end is the lowest in the alphabet then there is no
+ * sense testing it. */
+ if ( limitLow ) {
+ out << TABS(level) << "default:" << endl;
+ COND_TRANSLATE(data[mid], level+1);
+ }
+ else {
+ out << TABS(level) << "case " << GET_KEY() << " >= " <<
+ KEY(data[mid]->lowKey) << ":" << endl;
+ COND_TRANSLATE(data[mid], level+1);
+ }
+ out << TABS(level) << "}" << endl;
+ }
+ else {
+ /* Cannot go higher or lower than mid. It's mid or bust. What
+ * tests to do depends on limits of alphabet. */
+ if ( !limitLow && !limitHigh ) {
+ out << TABS(level) << "if " << KEY(data[mid]->lowKey) << " <= " <<
+ GET_KEY() << " && " << GET_KEY() << " <= " <<
+ KEY(data[mid]->highKey) << " {" << endl;
+ COND_TRANSLATE(data[mid], level+1);
+ out << TABS(level) << "}" << endl;
+ }
+ else if ( limitLow && !limitHigh ) {
+ out << TABS(level) << "if " << GET_KEY() << " <= " <<
+ KEY(data[mid]->highKey) << " {" << endl;
+ COND_TRANSLATE(data[mid], level+1);
+ out << TABS(level) << "}" << endl;
+ }
+ else if ( !limitLow && limitHigh ) {
+ out << TABS(level) << "if " << KEY(data[mid]->lowKey) << " <= " <<
+ GET_KEY() << " {" << endl;
+ COND_TRANSLATE(data[mid], level+1);
+ out << TABS(level) << "}" << endl;
+ }
+ else {
+ /* Both high and low are at the limit. No tests to do. */
+ COND_TRANSLATE(data[mid], level);
+ }
+ }
+}
+
+std::ostream &GoGotoCodeGen::STATE_GOTOS( int level )
+{
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ if ( st == redFsm->errState )
+ STATE_GOTO_ERROR(level);
+ else {
+ /* Writing code above state gotos. */
+ GOTO_HEADER( st, level );
+
+ if ( st->stateCondVect.length() > 0 ) {
+ out << TABS(level + 1) << "_widec = " << CAST(WIDE_ALPH_TYPE(), GET_KEY()) << endl;
+ emitCondBSearch( st, level + 1, 0, st->stateCondVect.length() - 1 );
+ }
+
+ /* Try singles. */
+ if ( st->outSingle.length() > 0 )
+ emitSingleSwitch( st, level + 1 );
+
+ /* Default case is to binary search for the ranges, if that fails then */
+ if ( st->outRange.length() > 0 )
+ emitRangeBSearch( st, level + 1, 0, st->outRange.length() - 1 );
+
+ /* Write the default transition. */
+ TRANS_GOTO( st->defTrans, level + 1 ) << endl;
+ }
+ }
+ return out;
+}
+
+std::ostream &GoGotoCodeGen::TRANSITIONS()
+{
+ /* Emit any transitions that have functions and that go to
+ * this state. */
+ for ( TransApSet::Iter trans = redFsm->transSet; trans.lte(); trans++ ) {
+ /* Write the label for the transition so it can be jumped to. */
+ out << " tr" << trans->id << ": ";
+
+ /* Destination state. */
+ if ( trans->action != 0 && trans->action->anyCurStateRef() )
+ out << "_ps = " << vCS() << ";";
+ out << vCS() << " = " << trans->targ->id << "; ";
+
+ if ( trans->action != 0 ) {
+ /* Write out the transition func. */
+ out << "goto f" << trans->action->actListId << endl;
+ }
+ else {
+ /* No code to execute, just loop around. */
+ out << "goto _again" << endl;
+ }
+ }
+ return out;
+}
+
+std::ostream &GoGotoCodeGen::EXEC_FUNCS()
+{
+ /* Make labels that set acts and jump to execFuncs. Loop func indicies. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numTransRefs > 0 ) {
+ out << " f" << redAct->actListId << ": " <<
+ "_acts = " << (redAct->location + 1) << ";"
+ " goto execFuncs" << endl;
+ }
+ }
+
+ out <<
+ endl <<
+ "execFuncs:" << endl <<
+ " _nacts = " << CAST(UINT(), A() + "[_acts]") << "; _acts++" << endl <<
+ " for ; _nacts > 0; _nacts-- {" << endl <<
+ " _acts++" << endl <<
+ " switch " << A() << "[_acts - 1]" << " {" << endl;
+ ACTION_SWITCH(2);
+ out <<
+ " }" << endl <<
+ " }" << endl <<
+ " goto _again" << endl;
+ return out;
+}
+
+unsigned int GoGotoCodeGen::TO_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->toStateAction != 0 )
+ act = state->toStateAction->location+1;
+ return act;
+}
+
+unsigned int GoGotoCodeGen::FROM_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->fromStateAction != 0 )
+ act = state->fromStateAction->location+1;
+ return act;
+}
+
+unsigned int GoGotoCodeGen::EOF_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->eofAction != 0 )
+ act = state->eofAction->location+1;
+ return act;
+}
+
+std::ostream &GoGotoCodeGen::TO_STATE_ACTIONS()
+{
+ /* Take one off for the psuedo start state. */
+ int numStates = redFsm->stateList.length();
+ unsigned int *vals = new unsigned int[numStates];
+ memset( vals, 0, sizeof(unsigned int)*numStates );
+
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ )
+ vals[st->id] = TO_STATE_ACTION(st);
+
+ out << " ";
+ for ( int st = 0; st < redFsm->nextStateId; st++ ) {
+ /* Write any eof action. */
+ out << vals[st] << ", ";
+ if ( st < numStates-1 ) {
+ if ( (st+1) % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ delete[] vals;
+ return out;
+}
+
+std::ostream &GoGotoCodeGen::FROM_STATE_ACTIONS()
+{
+ /* Take one off for the psuedo start state. */
+ int numStates = redFsm->stateList.length();
+ unsigned int *vals = new unsigned int[numStates];
+ memset( vals, 0, sizeof(unsigned int)*numStates );
+
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ )
+ vals[st->id] = FROM_STATE_ACTION(st);
+
+ out << " ";
+ for ( int st = 0; st < redFsm->nextStateId; st++ ) {
+ /* Write any eof action. */
+ out << vals[st] << ", ";
+ if ( st < numStates-1 ) {
+ if ( (st+1) % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ delete[] vals;
+ return out;
+}
+
+std::ostream &GoGotoCodeGen::EOF_ACTIONS()
+{
+ /* Take one off for the psuedo start state. */
+ int numStates = redFsm->stateList.length();
+ unsigned int *vals = new unsigned int[numStates];
+ memset( vals, 0, sizeof(unsigned int)*numStates );
+
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ )
+ vals[st->id] = EOF_ACTION(st);
+
+ out << " ";
+ for ( int st = 0; st < redFsm->nextStateId; st++ ) {
+ /* Write any eof action. */
+ out << vals[st] << ", ";
+ if ( st < numStates-1 ) {
+ if ( (st+1) % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ delete[] vals;
+ return out;
+}
+
+std::ostream &GoGotoCodeGen::FINISH_CASES()
+{
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* States that are final and have an out action need a case. */
+ if ( st->eofAction != 0 ) {
+ /* Write the case label. */
+ out << TABS(2) << "case " << st->id << ":" << endl;
+
+ /* Write the goto func. */
+ out << TABS(3) << "goto f" << st->eofAction->actListId << endl;
+ }
+ }
+
+ return out;
+}
+
+void GoGotoCodeGen::writeData()
+{
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActArrItem), A() );
+ ACTIONS_ARRAY();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ if ( redFsm->anyToStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), TSA() );
+ TO_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ if ( redFsm->anyFromStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), FSA() );
+ FROM_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), EA() );
+ EOF_ACTIONS();
+ CLOSE_ARRAY() <<
+ endl;
+ }
+
+ STATE_IDS();
+}
+
+void GoGotoCodeGen::writeExec()
+{
+ testEofUsed = false;
+ outLabelUsed = false;
+
+ out << " {" << endl;
+
+ if ( redFsm->anyRegCurStateRef() )
+ out << " var _ps " << INT() << " = 0" << endl;
+
+ if ( redFsm->anyToStateActions() || redFsm->anyRegActions()
+ || redFsm->anyFromStateActions() )
+ {
+ out <<
+ " var _acts " << INT() << endl <<
+ " var _nacts " << UINT() << endl;
+ }
+
+ if ( redFsm->anyConditions() )
+ out << " var _widec " << WIDE_ALPH_TYPE() << endl;
+
+ out << endl;
+
+ if ( !noEnd ) {
+ testEofUsed = true;
+ out <<
+ " if " << P() << " == " << PE() << " {" << endl <<
+ " goto _test_eof" << endl <<
+ " }" << endl;
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " if " << vCS() << " == " << redFsm->errState->id << " {" << endl <<
+ " goto _out" << endl <<
+ " }" << endl;
+ }
+
+ out << "_resume:" << endl;
+
+ if ( redFsm->anyFromStateActions() ) {
+ out <<
+ " _acts = " << CAST(INT(), FSA() + "[" + vCS() + "]") << endl <<
+ " _nacts = " << CAST(UINT(), A() + "[_acts]") << "; _acts++" << endl <<
+ " for ; _nacts > 0; _nacts-- {" << endl <<
+ " _acts++" << endl <<
+ " switch " << A() << "[_acts - 1]" << " {" << endl;
+ FROM_STATE_ACTION_SWITCH(2);
+ out <<
+ " }" << endl <<
+ " }" << endl <<
+ endl;
+ }
+
+ out <<
+ " switch " << vCS() << " {" << endl;
+ STATE_GOTOS(1);
+ out <<
+ " }" << endl <<
+ endl;
+ TRANSITIONS() <<
+ endl;
+
+ if ( redFsm->anyRegActions() )
+ EXEC_FUNCS() << endl;
+
+ out << "_again:" << endl;
+
+ if ( redFsm->anyToStateActions() ) {
+ out <<
+ " _acts = " << CAST(INT(), TSA() + "[" + vCS() + "]") << endl <<
+ " _nacts = " << CAST(UINT(), A() + "[_acts]") << "; _acts++" << endl <<
+ " for ; _nacts > 0; _nacts-- {" << endl <<
+ " _acts++" << endl <<
+ " switch " << A() << "[_acts - 1]" << " {" << endl;
+ TO_STATE_ACTION_SWITCH(2);
+ out <<
+ " }" << endl <<
+ " }" << endl <<
+ endl;
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " if " << vCS() << " == " << redFsm->errState->id << " {" << endl <<
+ " goto _out" << endl <<
+ " }" << endl;
+ }
+
+ if ( !noEnd ) {
+ out <<
+ " if " << P() << "++; " << P() << " != " << PE() << " {" << endl <<
+ " goto _resume" << endl <<
+ " }" << endl;
+ }
+ else {
+ out <<
+ " " << P() << "++" << endl <<
+ " goto _resume" << endl;
+ }
+
+ if ( testEofUsed )
+ out << " _test_eof: {}" << endl;
+
+ if ( redFsm->anyEofTrans() || redFsm->anyEofActions() ) {
+ out <<
+ " if " << P() << " == " << vEOF() << " {" << endl;
+
+ if ( redFsm->anyEofTrans() ) {
+ out <<
+ " switch " << vCS() << " {" << endl;
+
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ if ( st->eofTrans != 0 )
+ out <<
+ " case " << st->id << ":" << endl <<
+ " goto tr" << st->eofTrans->id << endl;
+ }
+
+ out <<
+ " }" << endl;
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ out <<
+ " __acts := " << CAST(INT(), EA() + "[" + vCS() + "]") << endl <<
+ " __nacts := " << CAST(UINT(), A() + "[__acts]") << "; __acts++" << endl <<
+ " for ; __nacts > 0; __nacts-- {" << endl <<
+ " __acts++" << endl <<
+ " switch " << A() << "[__acts - 1]" << " {" << endl;
+ EOF_ACTION_SWITCH(3);
+ out <<
+ " }" << endl <<
+ " }" << endl;
+ }
+
+ out <<
+ " }" << endl <<
+ endl;
+ }
+
+ if ( outLabelUsed )
+ out << " _out: {}" << endl;
+
+ out << " }" << endl;
+}
diff --git a/ragel/gogoto.h b/ragel/gogoto.h
new file mode 100644
index 0000000..18d058e
--- /dev/null
+++ b/ragel/gogoto.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _GOGOTO_H
+#define _GOGOTO_H
+
+#include <iostream>
+#include "gotablish.h"
+
+/* Forwards. */
+struct CodeGenData;
+struct NameInst;
+struct RedTransAp;
+struct RedStateAp;
+struct GenStateCond;
+
+/*
+ * Goto driven fsm.
+ */
+class GoGotoCodeGen
+ : public GoTablishCodeGen
+{
+public:
+ GoGotoCodeGen( ostream &out )
+ : GoTablishCodeGen(out) {}
+
+protected:
+ std::ostream &TO_STATE_ACTION_SWITCH( int level );
+ std::ostream &FROM_STATE_ACTION_SWITCH( int level );
+ std::ostream &EOF_ACTION_SWITCH( int level );
+ std::ostream &ACTION_SWITCH( int level );
+ std::ostream &STATE_GOTOS( int level );
+ std::ostream &TRANSITIONS();
+ std::ostream &EXEC_FUNCS();
+ std::ostream &FINISH_CASES();
+
+ virtual unsigned int TO_STATE_ACTION( RedStateAp *state );
+ virtual unsigned int FROM_STATE_ACTION( RedStateAp *state );
+ virtual unsigned int EOF_ACTION( RedStateAp *state );
+
+ std::ostream &TO_STATE_ACTIONS();
+ std::ostream &FROM_STATE_ACTIONS();
+ std::ostream &EOF_ACTIONS();
+
+ void COND_TRANSLATE( GenStateCond *stateCond, int level );
+ void emitCondBSearch( RedStateAp *state, int level, int low, int high );
+ void STATE_CONDS( RedStateAp *state, bool genDefault );
+
+ virtual std::ostream &TRANS_GOTO( RedTransAp *trans, int level );
+ virtual int TRANS_NR( RedTransAp *trans );
+
+ void emitSingleSwitch( RedStateAp *state, int level );
+ void emitRangeBSearch( RedStateAp *state, int level, int low, int high );
+
+ /* Called from STATE_GOTOS just before writing the gotos */
+ virtual void GOTO_HEADER( RedStateAp *state, int level );
+ virtual void STATE_GOTO_ERROR( int level );
+
+ virtual void writeData();
+ virtual void writeExec();
+};
+
+#endif
diff --git a/ragel/goipgoto.cpp b/ragel/goipgoto.cpp
new file mode 100644
index 0000000..153197e
--- /dev/null
+++ b/ragel/goipgoto.cpp
@@ -0,0 +1,477 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "ragel.h"
+#include "goipgoto.h"
+#include "redfsm.h"
+#include "gendata.h"
+#include "bstmap.h"
+
+using std::endl;
+
+bool GoIpGotoCodeGen::useAgainLabel()
+{
+ return redFsm->anyRegActionRets() ||
+ redFsm->anyRegActionByValControl() ||
+ redFsm->anyRegNextStmt();
+}
+
+void GoIpGotoCodeGen::GOTO( ostream &ret, int gotoDest, bool inFinish )
+{
+ ret << "{" << "goto st" << gotoDest << " }";
+}
+
+void GoIpGotoCodeGen::CALL( ostream &ret, int callDest, int targState, bool inFinish )
+{
+ if ( prePushExpr != 0 ) {
+ ret << "{";
+ INLINE_LIST( ret, prePushExpr, 0, false, false );
+ }
+
+ ret << "{" << STACK() << "[" << TOP() << "] = " << targState <<
+ "; " << TOP() << "++; " << "goto st" << callDest << " }";
+
+ if ( prePushExpr != 0 )
+ ret << "}";
+}
+
+void GoIpGotoCodeGen::CALL_EXPR( ostream &ret, GenInlineItem *ilItem, int targState, bool inFinish )
+{
+ if ( prePushExpr != 0 ) {
+ ret << "{";
+ INLINE_LIST( ret, prePushExpr, 0, false, false );
+ }
+
+ ret << "{" << STACK() << "[" << TOP() << "] = " << targState << "; " << TOP() << "++; " << vCS() << " = (";
+ INLINE_LIST( ret, ilItem->children, 0, inFinish, false );
+ ret << "); " << "goto _again }";
+
+ if ( prePushExpr != 0 )
+ ret << "}";
+}
+
+void GoIpGotoCodeGen::RET( ostream &ret, bool inFinish )
+{
+ ret << "{" << TOP() << "--; " << vCS() << " = " << STACK() << "[" << TOP() << "];";
+
+ if ( postPopExpr != 0 ) {
+ ret << "{";
+ INLINE_LIST( ret, postPopExpr, 0, false, false );
+ ret << "}";
+ }
+
+ ret << "goto _again }";
+}
+
+void GoIpGotoCodeGen::GOTO_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish )
+{
+ ret << "{" << vCS() << " = (";
+ INLINE_LIST( ret, ilItem->children, 0, inFinish, false );
+ ret << "); " << "goto _again }";
+}
+
+void GoIpGotoCodeGen::NEXT( ostream &ret, int nextDest, bool inFinish )
+{
+ ret << vCS() << " = " << nextDest << ";";
+}
+
+void GoIpGotoCodeGen::NEXT_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish )
+{
+ ret << vCS() << " = (";
+ INLINE_LIST( ret, ilItem->children, 0, inFinish, false );
+ ret << ");";
+}
+
+void GoIpGotoCodeGen::CURS( ostream &ret, bool inFinish )
+{
+ ret << "(_ps)";
+}
+
+void GoIpGotoCodeGen::TARGS( ostream &ret, bool inFinish, int targState )
+{
+ ret << targState;
+}
+
+void GoIpGotoCodeGen::BREAK( ostream &ret, int targState, bool csForced )
+{
+ outLabelUsed = true;
+ ret << "{" << P() << "++; ";
+ if ( !csForced )
+ ret << vCS() << " = " << targState << "; ";
+ ret << "goto _out }";
+}
+
+bool GoIpGotoCodeGen::IN_TRANS_ACTIONS( RedStateAp *state )
+{
+ bool anyWritten = false;
+
+ /* Emit any transitions that have actions and that go to this state. */
+ for ( int it = 0; it < state->numInTrans; it++ ) {
+ RedTransAp *trans = state->inTrans[it];
+ if ( trans->action != 0 && trans->labelNeeded ) {
+ /* Remember that we wrote an action so we know to write the
+ * line directive for going back to the output. */
+ anyWritten = true;
+
+ /* Write the label for the transition so it can be jumped to. */
+ out << "tr" << trans->id << ":" << endl;
+
+ /* If the action contains a next, then we must preload the current
+ * state since the action may or may not set it. */
+ if ( trans->action->anyNextStmt() )
+ out << " " << vCS() << " = " << trans->targ->id << endl;
+
+ /* Write each action in the list. */
+ for ( GenActionTable::Iter item = trans->action->key; item.lte(); item++ ) {
+ ACTION( out, item->value, trans->targ->id, false,
+ trans->action->anyNextStmt() );
+ }
+
+ /* If the action contains a next then we need to reload, otherwise
+ * jump directly to the target state. */
+ if ( trans->action->anyNextStmt() )
+ out << " goto _again" << endl;
+ else
+ out << " goto st" << trans->targ->id << endl;
+ }
+ }
+
+ return anyWritten;
+}
+
+std::ostream &GoIpGotoCodeGen::STATE_GOTOS_SWITCH( int level )
+{
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ out << TABS(level) << "case " << st->id << ":" << endl;
+ out << TABS(level + 1) << "goto st_case_" << st->id << endl;
+ }
+ return out;
+}
+
+/* Called from GotoCodeGen::STATE_GOTOS just before writing the gotos for each
+ * state. */
+void GoIpGotoCodeGen::GOTO_HEADER( RedStateAp *state, int level )
+{
+ bool anyWritten = IN_TRANS_ACTIONS( state );
+
+ if ( state->labelNeeded )
+ out << TABS(level) << "st" << state->id << ":" << endl;
+
+ if ( state->toStateAction != 0 ) {
+ /* Remember that we wrote an action. Write every action in the list. */
+ anyWritten = true;
+ for ( GenActionTable::Iter item = state->toStateAction->key; item.lte(); item++ ) {
+ ACTION( out, item->value, state->id, false,
+ state->toStateAction->anyNextStmt() );
+ }
+ }
+
+ /* Advance and test buffer pos. */
+ if ( state->labelNeeded ) {
+ if ( !noEnd ) {
+ out <<
+ TABS(level + 1) << "if " << P() << "++; " << P() << " == " << PE() << " {" << endl <<
+ TABS(level + 2) << "goto _test_eof" << state->id << endl <<
+ TABS(level + 1) << "}" << endl;
+ }
+ else {
+ out <<
+ TABS(level + 1) << P() << "++" << endl;
+ }
+ }
+
+ /* Give the state a label. */
+ out << TABS(level) << "st_case_" << state->id << ":" << endl;
+
+ if ( state->fromStateAction != 0 ) {
+ /* Remember that we wrote an action. Write every action in the list. */
+ anyWritten = true;
+ for ( GenActionTable::Iter item = state->fromStateAction->key; item.lte(); item++ ) {
+ ACTION( out, item->value, state->id, false,
+ state->fromStateAction->anyNextStmt() );
+ }
+ }
+
+ if ( anyWritten )
+ genLineDirective( out );
+
+ /* Record the prev state if necessary. */
+ if ( state->anyRegCurStateRef() )
+ out << TABS(level + 1) << "_ps = " << state->id << endl;
+}
+
+void GoIpGotoCodeGen::STATE_GOTO_ERROR( int level )
+{
+ /* In the error state we need to emit some stuff that usually goes into
+ * the header. */
+ RedStateAp *state = redFsm->errState;
+ bool anyWritten = IN_TRANS_ACTIONS( state );
+
+ /* No case label needed since we don't switch on the error state. */
+ if ( anyWritten )
+ genLineDirective( out );
+
+ out << "st_case_" << state->id << ":" << endl;
+ if ( state->labelNeeded )
+ out << TABS(level) << "st" << state->id << ":" << endl;
+
+ /* Break out here. */
+ outLabelUsed = true;
+ out << TABS(level + 1) << vCS() << " = " << state->id << endl;
+ out << TABS(level + 1) << "goto _out" << endl;
+}
+
+
+/* Emit the goto to take for a given transition. */
+std::ostream &GoIpGotoCodeGen::TRANS_GOTO( RedTransAp *trans, int level )
+{
+ if ( trans->action != 0 ) {
+ /* Go to the transition which will go to the state. */
+ out << TABS(level) << "goto tr" << trans->id;
+ }
+ else {
+ /* Go directly to the target state. */
+ out << TABS(level) << "goto st" << trans->targ->id;
+ }
+ return out;
+}
+
+int GoIpGotoCodeGen::TRANS_NR( RedTransAp *trans )
+{
+ if ( trans->action != 0 ) {
+ /* Go to the transition which will go to the state. */
+ return trans->id + redFsm->stateList.length();
+ }
+ else {
+ /* Go directly to the target state. */
+ return trans->targ->id;
+ }
+}
+
+std::ostream &GoIpGotoCodeGen::EXIT_STATES()
+{
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ if ( st->outNeeded ) {
+ testEofUsed = true;
+ out << " _test_eof" << st->id << ": " << vCS() << " = " <<
+ st->id << "; goto _test_eof" << endl;
+ }
+ }
+ return out;
+}
+
+std::ostream &GoIpGotoCodeGen::AGAIN_CASES( int level )
+{
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ out <<
+ TABS(level) << "case " << st->id << ":" << endl <<
+ TABS(level + 1) << "goto st" << st->id << endl;
+ }
+ return out;
+}
+
+std::ostream &GoIpGotoCodeGen::FINISH_CASES( int level )
+{
+ bool anyWritten = false;
+
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ if ( st->eofAction != 0 ) {
+ if ( st->eofAction->eofRefs == 0 )
+ st->eofAction->eofRefs = new IntSet;
+ st->eofAction->eofRefs->insert( st->id );
+ }
+ }
+
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ if ( st->eofTrans != 0 )
+ out << TABS(level) << "case " << st->id << ":" << endl <<
+ TABS(level + 1) << "goto tr" << st->eofTrans->id << endl;
+ }
+
+ for ( GenActionTableMap::Iter act = redFsm->actionMap; act.lte(); act++ ) {
+ if ( act->eofRefs != 0 ) {
+ out << TABS(level) << "case ";
+ for ( IntSet::Iter pst = *act->eofRefs; pst.lte(); pst++ ) {
+ out << *pst;
+ if ( !pst.last() )
+ out << ", ";
+ }
+ out << ":" << endl;
+
+ /* Remember that we wrote a trans so we know to write the
+ * line directive for going back to the output. */
+ anyWritten = true;
+
+ /* Write each action in the eof action list. */
+ for ( GenActionTable::Iter item = act->key; item.lte(); item++ )
+ ACTION( out, item->value, STATE_ERR_STATE, true, false );
+ }
+ }
+
+ if ( anyWritten )
+ genLineDirective( out );
+ return out;
+}
+
+void GoIpGotoCodeGen::setLabelsNeeded( GenInlineList *inlineList )
+{
+ for ( GenInlineList::Iter item = *inlineList; item.lte(); item++ ) {
+ switch ( item->type ) {
+ case GenInlineItem::Goto: case GenInlineItem::Call: {
+ /* Mark the target as needing a label. */
+ item->targState->labelNeeded = true;
+ break;
+ }
+ default: break;
+ }
+
+ if ( item->children != 0 )
+ setLabelsNeeded( item->children );
+ }
+}
+
+/* Set up labelNeeded flag for each state. */
+void GoIpGotoCodeGen::setLabelsNeeded()
+{
+ /* If we use the _again label, then we the _again switch, which uses all
+ * labels. */
+ if ( useAgainLabel() ) {
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ )
+ st->labelNeeded = true;
+ }
+ else {
+ /* Do not use all labels by default, init all labelNeeded vars to false. */
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ )
+ st->labelNeeded = false;
+
+ /* Walk all transitions and set only those that have targs. */
+ for ( TransApSet::Iter trans = redFsm->transSet; trans.lte(); trans++ ) {
+ /* If there is no action with a next statement, then the label will be
+ * needed. */
+ if ( trans->action == 0 || !trans->action->anyNextStmt() )
+ trans->targ->labelNeeded = true;
+
+ /* Need labels for states that have goto or calls in action code
+ * invoked on characters (ie, not from out action code). */
+ if ( trans->action != 0 ) {
+ /* Loop the actions. */
+ for ( GenActionTable::Iter act = trans->action->key; act.lte(); act++ ) {
+ /* Get the action and walk it's tree. */
+ setLabelsNeeded( act->value->inlineList );
+ }
+ }
+ }
+ }
+
+ if ( !noEnd ) {
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ if ( st != redFsm->errState )
+ st->outNeeded = st->labelNeeded;
+ }
+ }
+}
+
+void GoIpGotoCodeGen::writeData()
+{
+ STATE_IDS();
+}
+
+void GoIpGotoCodeGen::writeExec()
+{
+ /* Must set labels immediately before writing because we may depend on the
+ * noend write option. */
+ setLabelsNeeded();
+ testEofUsed = false;
+ outLabelUsed = false;
+
+ out << " {" << endl;
+
+ if ( redFsm->anyRegCurStateRef() )
+ out << " var _ps " << INT() << " = 0" << endl;
+
+ if ( redFsm->anyConditions() )
+ out << " var _widec " << WIDE_ALPH_TYPE() << endl;
+
+ if ( !noEnd ) {
+ testEofUsed = true;
+ out <<
+ " if " << P() << " == " << PE() << " {" << endl <<
+ " goto _test_eof" << endl <<
+ " }" << endl;
+ }
+
+ if ( useAgainLabel() ) {
+ out <<
+ " goto _resume" << endl <<
+ endl <<
+ "_again:" << endl <<
+ " switch " << vCS() << " {" << endl;
+ AGAIN_CASES(1) <<
+ " }" << endl <<
+ endl;
+
+ if ( !noEnd ) {
+ testEofUsed = true;
+ out <<
+ " if " << P() << "++; " << P() << " == " << PE() << " {" << endl <<
+ " goto _test_eof" << endl <<
+ " }" << endl;
+ }
+ else {
+ out <<
+ " " << P() << "++" << endl;
+ }
+ out << "_resume:" << endl;
+ }
+
+ out <<
+ " switch " << vCS() << " {" << endl;
+ STATE_GOTOS_SWITCH(1);
+ out <<
+ " }" << endl;
+ out << " goto st_out" << endl;
+ STATE_GOTOS(1);
+ out << " st_out:" << endl;
+ EXIT_STATES() <<
+ endl;
+
+ if ( testEofUsed )
+ out << " _test_eof: {}" << endl;
+
+ if ( redFsm->anyEofTrans() || redFsm->anyEofActions() ) {
+ out <<
+ " if " << P() << " == " << vEOF() << " {" << endl <<
+ " switch " << vCS() << " {" << endl;
+ FINISH_CASES(2);
+ out <<
+ " }" << endl <<
+ " }" << endl <<
+ endl;
+ }
+
+ if ( outLabelUsed )
+ out << " _out: {}" << endl;
+
+ out <<
+ " }" << endl;
+}
diff --git a/ragel/goipgoto.h b/ragel/goipgoto.h
new file mode 100644
index 0000000..cceaee0
--- /dev/null
+++ b/ragel/goipgoto.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _GOIPGOTO_H
+#define _GOIPGOTO_H
+
+#include <iostream>
+#include "gogoto.h"
+
+/* Forwards. */
+struct CodeGenData;
+
+class GoIpGotoCodeGen
+ : public GoGotoCodeGen
+{
+public:
+ GoIpGotoCodeGen( ostream &out )
+ : GoGotoCodeGen(out) {}
+
+ std::ostream &EXIT_STATES();
+ std::ostream &TRANS_GOTO( RedTransAp *trans, int level );
+ int TRANS_NR( RedTransAp *trans );
+ std::ostream &FINISH_CASES( int level );
+ std::ostream &AGAIN_CASES( int level );
+ std::ostream &STATE_GOTOS_SWITCH( int level );
+
+ void GOTO( ostream &ret, int gotoDest, bool inFinish );
+ void CALL( ostream &ret, int callDest, int targState, bool inFinish );
+ void NEXT( ostream &ret, int nextDest, bool inFinish );
+ void GOTO_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish );
+ void NEXT_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish );
+ void CALL_EXPR( ostream &ret, GenInlineItem *ilItem, int targState, bool inFinish );
+ void RET( ostream &ret, bool inFinish );
+ void CURS( ostream &ret, bool inFinish );
+ void TARGS( ostream &ret, bool inFinish, int targState );
+ void BREAK( ostream &ret, int targState, bool csForced );
+
+ virtual void writeData();
+ virtual void writeExec();
+
+protected:
+ bool useAgainLabel();
+
+ /* Called from GotoCodeGen::STATE_GOTOS just before writing the gotos for
+ * each state. */
+ bool IN_TRANS_ACTIONS( RedStateAp *state );
+ void GOTO_HEADER( RedStateAp *state, int level );
+ void STATE_GOTO_ERROR( int level );
+
+ /* Set up labelNeeded flag for each state. */
+ void setLabelsNeeded( GenInlineList *inlineList );
+ void setLabelsNeeded();
+};
+
+#endif
diff --git a/ragel/gotable.cpp b/ragel/gotable.cpp
new file mode 100644
index 0000000..01152d3
--- /dev/null
+++ b/ragel/gotable.cpp
@@ -0,0 +1,977 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <sstream>
+#include "ragel.h"
+#include "gotable.h"
+#include "redfsm.h"
+#include "gendata.h"
+
+using std::endl;
+
+/* Determine if we should use indicies or not. */
+void GoTabCodeGen::calcIndexSize()
+{
+ int sizeWithInds = 0, sizeWithoutInds = 0;
+
+ /* Calculate cost of using with indicies. */
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ int totalIndex = st->outSingle.length() + st->outRange.length() +
+ (st->defTrans == 0 ? 0 : 1);
+ sizeWithInds += arrayTypeSize(redFsm->maxIndex) * totalIndex;
+ }
+ sizeWithInds += arrayTypeSize(redFsm->maxState) * redFsm->transSet.length();
+ if ( redFsm->anyActions() )
+ sizeWithInds += arrayTypeSize(redFsm->maxActionLoc) * redFsm->transSet.length();
+
+ /* Calculate the cost of not using indicies. */
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ int totalIndex = st->outSingle.length() + st->outRange.length() +
+ (st->defTrans == 0 ? 0 : 1);
+ sizeWithoutInds += arrayTypeSize(redFsm->maxState) * totalIndex;
+ if ( redFsm->anyActions() )
+ sizeWithoutInds += arrayTypeSize(redFsm->maxActionLoc) * totalIndex;
+ }
+
+ /* If using indicies reduces the size, use them. */
+ useIndicies = sizeWithInds < sizeWithoutInds;
+}
+
+std::ostream &GoTabCodeGen::TO_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->toStateAction != 0 )
+ act = state->toStateAction->location+1;
+ out << act;
+ return out;
+}
+
+std::ostream &GoTabCodeGen::FROM_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->fromStateAction != 0 )
+ act = state->fromStateAction->location+1;
+ out << act;
+ return out;
+}
+
+std::ostream &GoTabCodeGen::EOF_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->eofAction != 0 )
+ act = state->eofAction->location+1;
+ out << act;
+ return out;
+}
+
+
+std::ostream &GoTabCodeGen::TRANS_ACTION( RedTransAp *trans )
+{
+ /* If there are actions, emit them. Otherwise emit zero. */
+ int act = 0;
+ if ( trans->action != 0 )
+ act = trans->action->location+1;
+ out << act;
+ return out;
+}
+
+std::ostream &GoTabCodeGen::TO_STATE_ACTION_SWITCH( int level )
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numToStateRefs > 0 ) {
+ /* Write the case label, the action and the case break. */
+ out << TABS(level) << "case " << act->actionId << ":" << endl;
+ ACTION( out, act, 0, false, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &GoTabCodeGen::FROM_STATE_ACTION_SWITCH( int level )
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numFromStateRefs > 0 ) {
+ /* Write the case label, the action and the case break. */
+ out << TABS(level) << "case " << act->actionId << ":" << endl;
+ ACTION( out, act, 0, false, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &GoTabCodeGen::EOF_ACTION_SWITCH( int level )
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numEofRefs > 0 ) {
+ /* Write the case label, the action and the case break. */
+ out << TABS(level) << "case " << act->actionId << ":" << endl;
+ ACTION( out, act, 0, true, false );
+ }
+ }
+
+ genLineDirective(out);
+ return out;
+}
+
+
+std::ostream &GoTabCodeGen::ACTION_SWITCH( int level )
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numTransRefs > 0 ) {
+ /* Write the case label, the action and the case break. */
+ out << TABS(level) << "case " << act->actionId << ":" << endl;
+ ACTION( out, act, 0, false, false );
+ }
+ }
+
+ genLineDirective(out);
+ return out;
+}
+
+std::ostream &GoTabCodeGen::COND_OFFSETS()
+{
+ out << " ";
+ int totalStateNum = 0, curKeyOffset = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write the key offset. */
+ out << curKeyOffset;
+ out << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+
+ /* Move the key offset ahead. */
+ curKeyOffset += st->stateCondList.length();
+ }
+ out << endl;
+ return out;
+}
+
+std::ostream &GoTabCodeGen::KEY_OFFSETS()
+{
+ out << " ";
+ int totalStateNum = 0, curKeyOffset = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write the key offset. */
+ out << curKeyOffset;
+ out << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+
+ /* Move the key offset ahead. */
+ curKeyOffset += st->outSingle.length() + st->outRange.length()*2;
+ }
+ out << endl;
+ return out;
+}
+
+
+std::ostream &GoTabCodeGen::INDEX_OFFSETS()
+{
+ out << " ";
+ int totalStateNum = 0, curIndOffset = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write the index offset. */
+ out << curIndOffset;
+ out << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+
+ /* Move the index offset ahead. */
+ curIndOffset += st->outSingle.length() + st->outRange.length();
+ if ( st->defTrans != 0 )
+ curIndOffset += 1;
+ }
+ out << endl;
+ return out;
+}
+
+std::ostream &GoTabCodeGen::COND_LENS()
+{
+ out << " ";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write singles length. */
+ out << st->stateCondList.length();
+ out << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ return out;
+}
+
+
+std::ostream &GoTabCodeGen::SINGLE_LENS()
+{
+ out << " ";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write singles length. */
+ out << st->outSingle.length();
+ out << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ return out;
+}
+
+std::ostream &GoTabCodeGen::RANGE_LENS()
+{
+ out << " ";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Emit length of range index. */
+ out << st->outRange.length();
+ out << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ return out;
+}
+
+std::ostream &GoTabCodeGen::TO_STATE_ACTIONS()
+{
+ out << " ";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write any eof action. */
+ TO_STATE_ACTION(st);
+ out << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ return out;
+}
+
+std::ostream &GoTabCodeGen::FROM_STATE_ACTIONS()
+{
+ out << " ";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write any eof action. */
+ FROM_STATE_ACTION(st);
+ out << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ return out;
+}
+
+std::ostream &GoTabCodeGen::EOF_ACTIONS()
+{
+ out << " ";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write any eof action. */
+ EOF_ACTION(st);
+ out << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ return out;
+}
+
+std::ostream &GoTabCodeGen::EOF_TRANS()
+{
+ out << " ";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write any eof action. */
+ long trans = 0;
+ if ( st->eofTrans != 0 ) {
+ assert( st->eofTrans->pos >= 0 );
+ trans = st->eofTrans->pos+1;
+ }
+ out << trans;
+
+ out << ", ";
+ if ( !st.last() ) {
+ if ( ++totalStateNum % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ return out;
+}
+
+
+std::ostream &GoTabCodeGen::COND_KEYS()
+{
+ out << " ";
+ int totalTrans = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Loop the state's transitions. */
+ for ( GenStateCondList::Iter sc = st->stateCondList; sc.lte(); sc++ ) {
+ /* Lower key. */
+ out << KEY( sc->lowKey ) << ", ";
+ if ( ++totalTrans % IALL == 0 )
+ out << endl << " ";
+
+ /* Upper key. */
+ out << KEY( sc->highKey ) << ", ";
+ if ( ++totalTrans % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+
+ out << endl;
+ return out;
+}
+
+std::ostream &GoTabCodeGen::COND_SPACES()
+{
+ out << " ";
+ int totalTrans = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Loop the state's transitions. */
+ for ( GenStateCondList::Iter sc = st->stateCondList; sc.lte(); sc++ ) {
+ /* Cond Space id. */
+ out << sc->condSpace->condSpaceId << ", ";
+ if ( ++totalTrans % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+
+ out << endl;
+ return out;
+}
+
+std::ostream &GoTabCodeGen::KEYS()
+{
+ out << " ";
+ int totalTrans = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Loop the singles. */
+ for ( RedTransList::Iter stel = st->outSingle; stel.lte(); stel++ ) {
+ out << KEY( stel->lowKey ) << ", ";
+ if ( ++totalTrans % IALL == 0 )
+ out << endl << " ";
+ }
+
+ /* Loop the state's transitions. */
+ for ( RedTransList::Iter rtel = st->outRange; rtel.lte(); rtel++ ) {
+ /* Lower key. */
+ out << KEY( rtel->lowKey ) << ", ";
+ if ( ++totalTrans % IALL == 0 )
+ out << endl << " ";
+
+ /* Upper key. */
+ out << KEY( rtel->highKey ) << ", ";
+ if ( ++totalTrans % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+
+ out << endl;
+ return out;
+}
+
+std::ostream &GoTabCodeGen::INDICIES()
+{
+ out << " ";
+ int totalTrans = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Walk the singles. */
+ for ( RedTransList::Iter stel = st->outSingle; stel.lte(); stel++ ) {
+ out << stel->value->id << ", ";
+ if ( ++totalTrans % IALL == 0 )
+ out << endl << " ";
+ }
+
+ /* Walk the ranges. */
+ for ( RedTransList::Iter rtel = st->outRange; rtel.lte(); rtel++ ) {
+ out << rtel->value->id << ", ";
+ if ( ++totalTrans % IALL == 0 )
+ out << endl << " ";
+ }
+
+ /* The state's default index goes next. */
+ if ( st->defTrans != 0 ) {
+ out << st->defTrans->id << ", ";
+ if ( ++totalTrans % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+
+ out << endl;
+ return out;
+}
+
+std::ostream &GoTabCodeGen::TRANS_TARGS()
+{
+ out << " ";
+ int totalTrans = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Walk the singles. */
+ for ( RedTransList::Iter stel = st->outSingle; stel.lte(); stel++ ) {
+ RedTransAp *trans = stel->value;
+ out << trans->targ->id << ", ";
+ if ( ++totalTrans % IALL == 0 )
+ out << endl << " ";
+ }
+
+ /* Walk the ranges. */
+ for ( RedTransList::Iter rtel = st->outRange; rtel.lte(); rtel++ ) {
+ RedTransAp *trans = rtel->value;
+ out << trans->targ->id << ", ";
+ if ( ++totalTrans % IALL == 0 )
+ out << endl << " ";
+ }
+
+ /* The state's default target state. */
+ if ( st->defTrans != 0 ) {
+ RedTransAp *trans = st->defTrans;
+ out << trans->targ->id << ", ";
+ if ( ++totalTrans % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+
+ /* Add any eof transitions that have not yet been written out above. */
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ if ( st->eofTrans != 0 ) {
+ RedTransAp *trans = st->eofTrans;
+ trans->pos = totalTrans;
+ out << trans->targ->id << ", ";
+ if ( ++totalTrans % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+
+
+ out << endl;
+ return out;
+}
+
+
+std::ostream &GoTabCodeGen::TRANS_ACTIONS()
+{
+ out << " ";
+ int totalTrans = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Walk the singles. */
+ for ( RedTransList::Iter stel = st->outSingle; stel.lte(); stel++ ) {
+ RedTransAp *trans = stel->value;
+ TRANS_ACTION( trans ) << ", ";
+ if ( ++totalTrans % IALL == 0 )
+ out << endl << " ";
+ }
+
+ /* Walk the ranges. */
+ for ( RedTransList::Iter rtel = st->outRange; rtel.lte(); rtel++ ) {
+ RedTransAp *trans = rtel->value;
+ TRANS_ACTION( trans ) << ", ";
+ if ( ++totalTrans % IALL == 0 )
+ out << endl << " ";
+ }
+
+ /* The state's default index goes next. */
+ if ( st->defTrans != 0 ) {
+ RedTransAp *trans = st->defTrans;
+ TRANS_ACTION( trans ) << ", ";
+ if ( ++totalTrans % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+
+ /* Add any eof transitions that have not yet been written out above. */
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ if ( st->eofTrans != 0 ) {
+ RedTransAp *trans = st->eofTrans;
+ TRANS_ACTION( trans ) << ", ";
+ if ( ++totalTrans % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+
+ out << endl;
+ return out;
+}
+
+std::ostream &GoTabCodeGen::TRANS_TARGS_WI()
+{
+ /* Transitions must be written ordered by their id. */
+ RedTransAp **transPtrs = new RedTransAp*[redFsm->transSet.length()];
+ for ( TransApSet::Iter trans = redFsm->transSet; trans.lte(); trans++ )
+ transPtrs[trans->id] = trans;
+
+ /* Keep a count of the num of items in the array written. */
+ out << " ";
+ int totalStates = 0;
+ for ( int t = 0; t < redFsm->transSet.length(); t++ ) {
+ /* Record the position, need this for eofTrans. */
+ RedTransAp *trans = transPtrs[t];
+ trans->pos = t;
+
+ /* Write out the target state. */
+ out << trans->targ->id << ", ";
+ if ( t < redFsm->transSet.length()-1 ) {
+ if ( ++totalStates % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ delete[] transPtrs;
+ return out;
+}
+
+
+std::ostream &GoTabCodeGen::TRANS_ACTIONS_WI()
+{
+ /* Transitions must be written ordered by their id. */
+ RedTransAp **transPtrs = new RedTransAp*[redFsm->transSet.length()];
+ for ( TransApSet::Iter trans = redFsm->transSet; trans.lte(); trans++ )
+ transPtrs[trans->id] = trans;
+
+ /* Keep a count of the num of items in the array written. */
+ out << " ";
+ int totalAct = 0;
+ for ( int t = 0; t < redFsm->transSet.length(); t++ ) {
+ /* Write the function for the transition. */
+ RedTransAp *trans = transPtrs[t];
+ TRANS_ACTION( trans );
+ out << ", ";
+ if ( t < redFsm->transSet.length()-1 ) {
+ if ( ++totalAct % IALL == 0 )
+ out << endl << " ";
+ }
+ }
+ out << endl;
+ delete[] transPtrs;
+ return out;
+}
+
+void GoTabCodeGen::writeData()
+{
+ /* If there are any transtion functions then output the array. If there
+ * are none, don't bother emitting an empty array that won't be used. */
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActArrItem), A() );
+ ACTIONS_ARRAY();
+ CLOSE_ARRAY() << endl;
+ }
+
+ if ( redFsm->anyConditions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondOffset), CO() );
+ COND_OFFSETS();
+ CLOSE_ARRAY() << endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondLen), CL() );
+ COND_LENS();
+ CLOSE_ARRAY() << endl;
+
+ OPEN_ARRAY( WIDE_ALPH_TYPE(), CK() );
+ COND_KEYS();
+ CLOSE_ARRAY() << endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondSpaceId), C() );
+ COND_SPACES();
+ CLOSE_ARRAY() << endl;
+ }
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxKeyOffset), KO() );
+ KEY_OFFSETS();
+ CLOSE_ARRAY() << endl;
+
+ OPEN_ARRAY( WIDE_ALPH_TYPE(), K() );
+ KEYS();
+ CLOSE_ARRAY() << endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxSingleLen), SL() );
+ SINGLE_LENS();
+ CLOSE_ARRAY() << endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxRangeLen), RL() );
+ RANGE_LENS();
+ CLOSE_ARRAY() << endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndexOffset), IO() );
+ INDEX_OFFSETS();
+ CLOSE_ARRAY() << endl;
+
+ if ( useIndicies ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndex), I() );
+ INDICIES();
+ CLOSE_ARRAY() << endl;
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxState), TT() );
+ TRANS_TARGS_WI();
+ CLOSE_ARRAY() << endl;
+
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), TA() );
+ TRANS_ACTIONS_WI();
+ CLOSE_ARRAY() << endl;
+ }
+ }
+ else {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxState), TT() );
+ TRANS_TARGS();
+ CLOSE_ARRAY() << endl;
+
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), TA() );
+ TRANS_ACTIONS();
+ CLOSE_ARRAY() << endl;
+ }
+ }
+
+ if ( redFsm->anyToStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), TSA() );
+ TO_STATE_ACTIONS();
+ CLOSE_ARRAY() << endl;
+ }
+
+ if ( redFsm->anyFromStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), FSA() );
+ FROM_STATE_ACTIONS();
+ CLOSE_ARRAY() << endl;
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), EA() );
+ EOF_ACTIONS();
+ CLOSE_ARRAY() << endl;
+ }
+
+ if ( redFsm->anyEofTrans() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndexOffset+1), ET() );
+ EOF_TRANS();
+ CLOSE_ARRAY() << endl;
+ }
+
+ STATE_IDS();
+}
+
+void GoTabCodeGen::LOCATE_TRANS()
+{
+ out <<
+ " _keys = " << CAST(INT(), KO() + "[" + vCS() + "]") << endl <<
+ " _trans = " << CAST(INT(), IO() + "[" + vCS() + "]") << endl <<
+ endl <<
+ " _klen = " << CAST(INT(), SL() + "[" + vCS() + "]") << endl <<
+ " if _klen > 0 {" << endl <<
+ " _lower := " << CAST(INT(), "_keys") << endl <<
+ " var _mid " << INT() << endl <<
+ " _upper := " << CAST(INT(), "_keys + _klen - 1") << endl <<
+ " for {" << endl <<
+ " if _upper < _lower {" << endl <<
+ " break" << endl <<
+ " }" << endl <<
+ endl <<
+ " _mid = _lower + ((_upper - _lower) >> 1)" << endl <<
+ " switch {" << endl <<
+ " case " << GET_WIDE_KEY() << " < " << K() << "[_mid]" << ":" << endl <<
+ " _upper = _mid - 1" << endl <<
+ " case " << GET_WIDE_KEY() << " > " << K() << "[_mid]" << ":" << endl <<
+ " _lower = _mid + 1" << endl <<
+ " default:" << endl <<
+ " _trans += " << CAST(INT(), "_mid - " + CAST(INT(), "_keys")) << endl <<
+ " goto _match" << endl <<
+ " }" << endl <<
+ " }" << endl <<
+ " _keys += _klen" << endl <<
+ " _trans += _klen" << endl <<
+ " }" << endl <<
+ endl <<
+ " _klen = " << CAST(INT(), RL() + "[" + vCS() + "]") << endl <<
+ " if _klen > 0 {" << endl <<
+ " _lower := " << CAST(INT(), "_keys") << endl <<
+ " var _mid " << INT() << endl <<
+ " _upper := " << CAST(INT(), "_keys + (_klen << 1) - 2") << endl <<
+ " for {" << endl <<
+ " if _upper < _lower {" << endl <<
+ " break" << endl <<
+ " }" << endl <<
+ endl <<
+ " _mid = _lower + (((_upper - _lower) >> 1) & ^1)" << endl <<
+ " switch {" << endl <<
+ " case " << GET_WIDE_KEY() << " < " << K() << "[_mid]" << ":" << endl <<
+ " _upper = _mid - 2" << endl <<
+ " case " << GET_WIDE_KEY() << " > " << K() << "[_mid + 1]" << ":" << endl <<
+ " _lower = _mid + 2" << endl <<
+ " default:" << endl <<
+ " _trans += " << CAST(INT(), "(_mid - " + CAST(INT(), "_keys") + ") >> 1") << endl <<
+ " goto _match" << endl <<
+ " }" << endl <<
+ " }" << endl <<
+ " _trans += _klen" << endl <<
+ " }" << endl <<
+ endl;
+}
+
+void GoTabCodeGen::COND_TRANSLATE()
+{
+ out <<
+ " _widec = " << CAST(WIDE_ALPH_TYPE(), GET_KEY()) << endl <<
+ " _klen = " << CAST(INT(), CL() + "[" + vCS() + "]") << endl <<
+ " _keys = " << CAST(INT(), CO() + "[" + vCS() + "] * 2") << endl <<
+ " if _klen > 0 {" << endl <<
+ " _lower := " << CAST(INT(), "_keys") << endl <<
+ " var _mid " << INT() << endl <<
+ " _upper := " << CAST(INT(), "_keys + (_klen << 1) - 2") << endl <<
+ " COND_LOOP:" << endl <<
+ " for {" << endl <<
+ " if _upper < _lower {" << endl <<
+ " break" << endl <<
+ " }" << endl <<
+ endl <<
+ " _mid = _lower + (((_upper - _lower) >> 1) & ^1)" << endl <<
+ " switch {" << endl <<
+ " case " << GET_WIDE_KEY() << " < " << CAST(WIDE_ALPH_TYPE(), CK() + "[_mid]") << ":" << endl <<
+ " _upper = _mid - 2" << endl <<
+ " case " << GET_WIDE_KEY() << " > " << CAST(WIDE_ALPH_TYPE(), CK() + "[_mid + 1]") << ":" << endl <<
+ " _lower = _mid + 2" << endl <<
+ " default:" << endl <<
+ " switch " << C() << "[" << CAST(INT(), CO() + "[" + vCS() + "]") <<
+ " + ((_mid - _keys)>>1)] {" << endl;
+
+ for ( CondSpaceList::Iter csi = condSpaceList; csi.lte(); csi++ ) {
+ GenCondSpace *condSpace = csi;
+ out << TABS(4) << "case " << condSpace->condSpaceId << ":" << endl;
+ out << TABS(5) << "_widec = " << KEY(condSpace->baseKey) << " + (" << CAST(WIDE_ALPH_TYPE(), GET_KEY()) <<
+ " - " << KEY(keyOps->minKey) << ")" << endl;
+
+ for ( GenCondSet::Iter csi = condSpace->condSet; csi.lte(); csi++ ) {
+ out << TABS(5) << "if ";
+ CONDITION( out, *csi );
+ Size condValOffset = ((1 << csi.pos()) * keyOps->alphSize());
+ out << " {" << endl << TABS(6) << "_widec += " << condValOffset << endl << TABS(5) << "}" << endl;
+ }
+ }
+
+ out <<
+ " }" << endl <<
+ " break COND_LOOP" << endl <<
+ " }" << endl <<
+ " }" << endl <<
+ " }" << endl <<
+ endl;
+}
+
+void GoTabCodeGen::writeExec()
+{
+ testEofUsed = false;
+ outLabelUsed = false;
+
+ out <<
+ " {" << endl <<
+ " var _klen " << INT() << endl;
+
+ if ( redFsm->anyRegCurStateRef() )
+ out << " var _ps " << INT() << endl;
+
+ out <<
+ " var _trans " << INT() << endl;
+
+ if ( redFsm->anyConditions() )
+ out << " var _widec " << WIDE_ALPH_TYPE() << endl;
+
+ if ( redFsm->anyToStateActions() || redFsm->anyRegActions()
+ || redFsm->anyFromStateActions() )
+ {
+ out <<
+ " var _acts " << INT() << endl <<
+ " var _nacts " << UINT() << endl;
+ }
+
+ out <<
+ " var _keys " << INT() << endl;
+
+ if ( !noEnd ) {
+ testEofUsed = true;
+ out <<
+ " if " << P() << " == " << PE() << " {" << endl <<
+ " goto _test_eof" << endl <<
+ " }" << endl;
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " if " << vCS() << " == " << redFsm->errState->id << " {" << endl <<
+ " goto _out" << endl <<
+ " }" << endl;
+ }
+
+ out << "_resume:" << endl;
+
+ if ( redFsm->anyFromStateActions() ) {
+ out <<
+ " _acts = " << CAST(INT(), FSA() + "[" + vCS() + "]") << endl <<
+ " _nacts = " << CAST(UINT(), A() + "[_acts]") << "; _acts++" << endl <<
+ " for ; _nacts > 0; _nacts-- {" << endl <<
+ " _acts++" << endl <<
+ " switch " << A() << "[_acts - 1]" << " {" << endl;
+ FROM_STATE_ACTION_SWITCH(2);
+ out <<
+ " }" << endl <<
+ " }" << endl << endl;
+ }
+
+ if ( redFsm->anyConditions() )
+ COND_TRANSLATE();
+
+ LOCATE_TRANS();
+
+ out << "_match:" << endl;
+
+ if ( useIndicies )
+ out << " _trans = " << CAST(INT(), I() + "[_trans]") << endl;
+
+ if ( redFsm->anyEofTrans() )
+ out << "_eof_trans:" << endl;
+
+ if ( redFsm->anyRegCurStateRef() )
+ out << " _ps = " << vCS() << endl;
+
+ out <<
+ " " << vCS() << " = " << CAST(INT(), TT() + "[_trans]") << endl << endl;
+
+ if ( redFsm->anyRegActions() ) {
+ out <<
+ " if " << TA() << "[_trans] == 0 {" << endl <<
+ " goto _again" << endl <<
+ " }" << endl <<
+ endl <<
+ " _acts = " << CAST(INT(), TA() + "[_trans]") << endl <<
+ " _nacts = " << CAST(UINT(), A() + "[_acts]") << "; _acts++" << endl <<
+ " for ; _nacts > 0; _nacts-- {" << endl <<
+ " _acts++" << endl <<
+ " switch " << A() << "[_acts-1]" << " {" << endl;
+ ACTION_SWITCH(2);
+ out <<
+ " }" << endl <<
+ " }" << endl << endl;
+ }
+
+ if ( redFsm->anyRegActions() || redFsm->anyActionGotos() ||
+ redFsm->anyActionCalls() || redFsm->anyActionRets() )
+ out << "_again:" << endl;
+
+ if ( redFsm->anyToStateActions() ) {
+ out <<
+ " _acts = " << CAST(INT(), TSA() + "[" + vCS() + "]") << endl <<
+ " _nacts = " << CAST(UINT(), A() + "[_acts]") << "; _acts++" << endl <<
+ " for ; _nacts > 0; _nacts-- {" << endl <<
+ " _acts++" << endl <<
+ " switch " << A() << "[_acts-1] {" << endl;
+ TO_STATE_ACTION_SWITCH(2);
+ out <<
+ " }" << endl <<
+ " }" << endl << endl;
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " if " << vCS() << " == " << redFsm->errState->id << " {" << endl <<
+ " goto _out" << endl <<
+ " }" << endl;
+ }
+
+ if ( !noEnd ) {
+ out <<
+ " " << P() << "++" << endl <<
+ " if " << P() << " != " << PE() << " {" << endl <<
+ " goto _resume" << endl <<
+ " }" << endl;
+ }
+ else {
+ out <<
+ " " << P() << "++" << endl <<
+ " goto _resume" << endl;
+ }
+
+ if ( testEofUsed )
+ out << " _test_eof: {}" << endl;
+
+ if ( redFsm->anyEofTrans() || redFsm->anyEofActions() ) {
+ out <<
+ " if " << P() << " == " << vEOF() << " {" << endl;
+
+ if ( redFsm->anyEofTrans() ) {
+ out <<
+ " if " << ET() << "[" << vCS() << "] > 0 {" << endl <<
+ " _trans = " << CAST(INT(), ET() + "[" + vCS() + "] - 1") << endl <<
+ " goto _eof_trans" << endl <<
+ " }" << endl;
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ out <<
+ " __acts := " << EA() << "[" << vCS() << "]" << endl <<
+ " __nacts := " << CAST(UINT(), A() + "[__acts]") << "; __acts++" << endl <<
+ " for ; __nacts > 0; __nacts-- {" << endl <<
+ " __acts++" << endl <<
+ " switch " << A() << "[__acts-1] {" << endl;
+ EOF_ACTION_SWITCH(3);
+ out <<
+ " }" << endl <<
+ " }" << endl;
+ }
+
+ out <<
+ " }" << endl << endl;
+ }
+
+ if ( outLabelUsed )
+ out << " _out: {}" << endl;
+
+ out << " }" << endl;
+}
diff --git a/ragel/gotable.h b/ragel/gotable.h
new file mode 100644
index 0000000..a62b8a0
--- /dev/null
+++ b/ragel/gotable.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _GOTABLE_H
+#define _GOTABLE_H
+
+#include <iostream>
+#include "gotablish.h"
+
+class GoTabCodeGen
+ : public GoTablishCodeGen
+{
+public:
+ GoTabCodeGen( ostream &out )
+ : GoTablishCodeGen(out) {}
+
+ virtual ~GoTabCodeGen() { }
+ virtual void writeData();
+ virtual void writeExec();
+
+protected:
+ std::ostream &TO_STATE_ACTION_SWITCH( int level );
+ std::ostream &FROM_STATE_ACTION_SWITCH( int level );
+ std::ostream &EOF_ACTION_SWITCH( int level );
+ std::ostream &ACTION_SWITCH( int level );
+
+ std::ostream &COND_KEYS();
+ std::ostream &COND_SPACES();
+ std::ostream &KEYS();
+ std::ostream &INDICIES();
+ std::ostream &COND_OFFSETS();
+ std::ostream &KEY_OFFSETS();
+ std::ostream &INDEX_OFFSETS();
+ std::ostream &COND_LENS();
+ std::ostream &SINGLE_LENS();
+ std::ostream &RANGE_LENS();
+ std::ostream &TO_STATE_ACTIONS();
+ std::ostream &FROM_STATE_ACTIONS();
+ std::ostream &EOF_ACTIONS();
+ std::ostream &EOF_TRANS();
+ std::ostream &TRANS_TARGS();
+ std::ostream &TRANS_ACTIONS();
+ std::ostream &TRANS_TARGS_WI();
+ std::ostream &TRANS_ACTIONS_WI();
+ void LOCATE_TRANS();
+
+ void COND_TRANSLATE();
+
+ virtual std::ostream &TO_STATE_ACTION( RedStateAp *state );
+ virtual std::ostream &FROM_STATE_ACTION( RedStateAp *state );
+ virtual std::ostream &EOF_ACTION( RedStateAp *state );
+ virtual std::ostream &TRANS_ACTION( RedTransAp *trans );
+ virtual void calcIndexSize();
+};
+
+#endif
diff --git a/ragel/gotablish.cpp b/ragel/gotablish.cpp
new file mode 100644
index 0000000..218ab47
--- /dev/null
+++ b/ragel/gotablish.cpp
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "ragel.h"
+#include "gotablish.h"
+
+using std::endl;
+
+void GoTablishCodeGen::GOTO( ostream &ret, int gotoDest, bool inFinish )
+{
+ ret << vCS() << " = " << gotoDest << endl <<
+ "goto _again" << endl;
+}
+
+void GoTablishCodeGen::GOTO_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish )
+{
+ ret << vCS() << " = (";
+ INLINE_LIST( ret, ilItem->children, 0, inFinish, false );
+ ret << ")" << endl << "goto _again" << endl;
+}
+
+void GoTablishCodeGen::CURS( ostream &ret, bool inFinish )
+{
+ ret << "(_ps)";
+}
+
+void GoTablishCodeGen::TARGS( ostream &ret, bool inFinish, int targState )
+{
+ ret << "(" << vCS() << ")";
+}
+
+void GoTablishCodeGen::NEXT( ostream &ret, int nextDest, bool inFinish )
+{
+ ret << vCS() << " = " << nextDest << endl;
+}
+
+void GoTablishCodeGen::NEXT_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish )
+{
+ ret << vCS() << " = (";
+ INLINE_LIST( ret, ilItem->children, 0, inFinish, false );
+ ret << ")" << endl;
+}
+
+void GoTablishCodeGen::CALL( ostream &ret, int callDest, int targState, bool inFinish )
+{
+ if ( prePushExpr != 0 ) {
+ ret << "{ ";
+ INLINE_LIST( ret, prePushExpr, 0, false, false );
+ }
+
+ ret << STACK() << "[" << TOP() << "] = " << vCS() << "; " << TOP() << "++; " <<
+ vCS() << " = " << callDest << "; " << "goto _again" << endl;
+
+ if ( prePushExpr != 0 )
+ ret << " }";
+}
+
+void GoTablishCodeGen::CALL_EXPR( ostream &ret, GenInlineItem *ilItem, int targState, bool inFinish )
+{
+ if ( prePushExpr != 0 ) {
+ ret << "{";
+ INLINE_LIST( ret, prePushExpr, 0, false, false );
+ }
+
+ ret << STACK() << "[" << TOP() << "] = " << vCS() << "; " << TOP() << "++; " << vCS() << " = (";
+ INLINE_LIST( ret, ilItem->children, targState, inFinish, false );
+ ret << "); " << "goto _again" << endl;
+
+ if ( prePushExpr != 0 )
+ ret << "}";
+}
+
+void GoTablishCodeGen::RET( ostream &ret, bool inFinish )
+{
+ ret << TOP() << "--; " << vCS() << " = " << STACK() << "[" <<
+ TOP() << "]" << endl;
+
+ if ( postPopExpr != 0 ) {
+ ret << "{ ";
+ INLINE_LIST( ret, postPopExpr, 0, false, false );
+ ret << " }" << endl;
+ }
+
+ ret << "goto _again" << endl;
+}
+
+void GoTablishCodeGen::BREAK( ostream &ret, int targState, bool csForced )
+{
+ outLabelUsed = true;
+ ret << P() << "++; " << "goto _out" << endl;
+}
diff --git a/ragel/gotablish.h b/ragel/gotablish.h
new file mode 100644
index 0000000..9e79b11
--- /dev/null
+++ b/ragel/gotablish.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _GOTABLISH_H
+#define _GOTABLISH_H
+
+#include "gocodegen.h"
+
+class GoTablishCodeGen
+ : public GoCodeGen
+{
+public:
+ GoTablishCodeGen( ostream &out )
+ : GoCodeGen(out) {}
+protected:
+ virtual void GOTO( ostream &ret, int gotoDest, bool inFinish );
+ virtual void CALL( ostream &ret, int callDest, int targState, bool inFinish );
+ virtual void NEXT( ostream &ret, int nextDest, bool inFinish );
+ virtual void GOTO_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish );
+ virtual void NEXT_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish );
+ virtual void CALL_EXPR( ostream &ret, GenInlineItem *ilItem, int targState, bool inFinish );
+ virtual void CURS( ostream &ret, bool inFinish );
+ virtual void TARGS( ostream &ret, bool inFinish, int targState );
+ virtual void RET( ostream &ret, bool inFinish );
+ virtual void BREAK( ostream &ret, int targState, bool csForced );
+};
+
+#endif
diff --git a/ragel/inputdata.cpp b/ragel/inputdata.cpp
index ac837d5..e734538 100644
--- a/ragel/inputdata.cpp
+++ b/ragel/inputdata.cpp
@@ -46,6 +46,7 @@ void InputData::cdDefaultFileName( const char *inputFile )
switch ( hostLang->lang ) {
case HostLang::C: defExtension = ".c"; break;
case HostLang::D: defExtension = ".d"; break;
+ case HostLang::D2: defExtension = ".d"; break;
default: break;
}
outputFileName = fileNameFromStem( inputFile, defExtension );
@@ -54,6 +55,15 @@ void InputData::cdDefaultFileName( const char *inputFile )
}
/* Invoked by the parser when the root element is opened. */
+void InputData::goDefaultFileName( const char *inputFile )
+{
+ /* If the output format is code and no output file name is given, then
+ * make a default. */
+ if ( outputFileName == 0 )
+ outputFileName = fileNameFromStem( inputFile, ".go" );
+}
+
+/* Invoked by the parser when the root element is opened. */
void InputData::javaDefaultFileName( const char *inputFile )
{
/* If the output format is code and no output file name is given, then
@@ -85,23 +95,39 @@ void InputData::csharpDefaultFileName( const char *inputFile )
}
}
+/* Invoked by the parser when the root element is opened. */
+void InputData::ocamlDefaultFileName( const char *inputFile )
+{
+ /* If the output format is code and no output file name is given, then
+ * make a default. */
+ if ( outputFileName == 0 )
+ outputFileName = fileNameFromStem( inputFile, ".ml" );
+}
+
void InputData::makeOutputStream()
{
if ( ! generateDot && ! generateXML ) {
switch ( hostLang->lang ) {
case HostLang::C:
case HostLang::D:
+ case HostLang::D2:
cdDefaultFileName( inputFileName );
break;
case HostLang::Java:
javaDefaultFileName( inputFileName );
break;
+ case HostLang::Go:
+ goDefaultFileName( inputFileName );
+ break;
case HostLang::Ruby:
rubyDefaultFileName( inputFileName );
break;
case HostLang::CSharp:
csharpDefaultFileName( inputFileName );
break;
+ case HostLang::OCaml:
+ ocamlDefaultFileName( inputFileName );
+ break;
}
}
diff --git a/ragel/inputdata.h b/ragel/inputdata.h
index 045be56..09a62c1 100644
--- a/ragel/inputdata.h
+++ b/ragel/inputdata.h
@@ -93,9 +93,11 @@ struct InputData
void terminateAllParsers();
void cdDefaultFileName( const char *inputFile );
+ void goDefaultFileName( const char *inputFile );
void javaDefaultFileName( const char *inputFile );
void rubyDefaultFileName( const char *inputFile );
void csharpDefaultFileName( const char *inputFile );
+ void ocamlDefaultFileName( const char *inputFile );
void writeLanguage( std::ostream &out );
void writeXML( std::ostream &out );
diff --git a/ragel/main.cpp b/ragel/main.cpp
index 2b54b51..048bbd9 100644
--- a/ragel/main.cpp
+++ b/ragel/main.cpp
@@ -121,10 +121,12 @@ void usage()
"host language:\n"
" -C The host language is C, C++, Obj-C or Obj-C++ (default)\n"
" -D The host language is D\n"
+" -Z The host language is Go\n"
" -J The host language is Java\n"
" -R The host language is Ruby\n"
" -A The host language is C#\n"
-"line direcives: (C/D/C#)\n"
+" -O The host language is OCaml\n"
+"line directives: (C/D/Ruby/C#)\n"
" -L Inhibit writing of #line directives\n"
"code style: (C/D/Java/Ruby/C#)\n"
" -T0 Table driven FSM (default)\n"
@@ -217,7 +219,7 @@ void escapeLineDirectivePath( std::ostream &out, char *path )
void processArgs( int argc, const char **argv, InputData &id )
{
- ParamCheck pc("xo:dnmleabjkS:M:I:CDJRAvHh?-:sT:F:G:P:LpV", argc, argv);
+ ParamCheck pc("xo:dnmleabjkS:M:I:CDEJZRAOvHh?-:sT:F:G:P:LpV", argc, argv);
/* FIXME: Need to check code styles VS langauge. */
@@ -315,6 +317,12 @@ void processArgs( int argc, const char **argv, InputData &id )
case 'D':
hostLang = &hostLangD;
break;
+ case 'E':
+ hostLang = &hostLangD2;
+ break;
+ case 'Z':
+ hostLang = &hostLangGo;
+ break;
case 'J':
hostLang = &hostLangJava;
break;
@@ -324,6 +332,9 @@ void processArgs( int argc, const char **argv, InputData &id )
case 'A':
hostLang = &hostLangCSharp;
break;
+ case 'O':
+ hostLang = &hostLangOCaml;
+ break;
/* Version and help. */
case 'v':
diff --git a/ragel/mlcodegen.cpp b/ragel/mlcodegen.cpp
new file mode 100644
index 0000000..f8268d6
--- /dev/null
+++ b/ragel/mlcodegen.cpp
@@ -0,0 +1,744 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "ragel.h"
+#include "mlcodegen.h"
+#include "redfsm.h"
+#include "gendata.h"
+#include <sstream>
+#include <iomanip>
+#include <string>
+#include <assert.h>
+
+using std::ostream;
+using std::ostringstream;
+using std::string;
+using std::cerr;
+using std::endl;
+
+using std::istream;
+using std::ifstream;
+using std::ostream;
+using std::ios;
+using std::cin;
+using std::cout;
+using std::cerr;
+using std::endl;
+
+void ocamlLineDirective( ostream &out, const char *fileName, int line )
+{
+ if ( noLineDirectives )
+ return;
+
+ /* Write the line info for to the input file. */
+ out << "# " << line << " \"";
+ for ( const char *pc = fileName; *pc != 0; pc++ ) {
+ if ( *pc == '\\' || *pc == '"' )
+ out << "\\";
+ out << *pc;
+ }
+ out << "\"\n";
+}
+
+void OCamlCodeGen::genLineDirective( ostream &out )
+{
+ std::streambuf *sbuf = out.rdbuf();
+ output_filter *filter = static_cast<output_filter*>(sbuf);
+ ocamlLineDirective( out, filter->fileName, filter->line + 1 );
+}
+
+
+/* Init code gen with in parameters. */
+OCamlCodeGen::OCamlCodeGen( ostream &out )
+:
+ CodeGenData(out)
+{
+}
+
+unsigned int OCamlCodeGen::arrayTypeSize( unsigned long maxVal )
+{
+ long long maxValLL = (long long) maxVal;
+ HostType *arrayType = keyOps->typeSubsumes( maxValLL );
+ assert( arrayType != 0 );
+ return arrayType->size;
+}
+
+string OCamlCodeGen::ARRAY_TYPE( unsigned long maxVal )
+{
+ return ARRAY_TYPE( maxVal, false );
+}
+
+string OCamlCodeGen::ARRAY_TYPE( unsigned long maxVal, bool forceSigned )
+{
+ long long maxValLL = (long long) maxVal;
+ HostType *arrayType;
+ if (forceSigned)
+ arrayType = keyOps->typeSubsumes(true, maxValLL);
+ else
+ arrayType = keyOps->typeSubsumes( maxValLL );
+ assert( arrayType != 0 );
+
+ string ret = arrayType->data1;
+ if ( arrayType->data2 != 0 ) {
+ ret += " ";
+ ret += arrayType->data2;
+ }
+ return ret;
+}
+
+/* Write out the fsm name. */
+string OCamlCodeGen::FSM_NAME()
+{
+ return fsmName;
+}
+
+/* Emit the offset of the start state as a decimal integer. */
+string OCamlCodeGen::START_STATE_ID()
+{
+ ostringstream ret;
+ ret << redFsm->startState->id;
+ return ret.str();
+};
+
+/* Write out the array of actions. */
+std::ostream &OCamlCodeGen::ACTIONS_ARRAY()
+{
+ out << "\t0; ";
+ int totalActions = 1;
+ for ( GenActionTableMap::Iter act = redFsm->actionMap; act.lte(); act++ ) {
+ /* Write out the length, which will never be the last character. */
+ out << act->key.length() << ARR_SEP();
+ /* Put in a line break every 8 */
+ if ( totalActions++ % 8 == 7 )
+ out << "\n\t";
+
+ for ( GenActionTable::Iter item = act->key; item.lte(); item++ ) {
+ out << item->value->actionId;
+ if ( ! (act.last() && item.last()) )
+ out << ARR_SEP();
+
+ /* Put in a line break every 8 */
+ if ( totalActions++ % 8 == 7 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ return out;
+}
+
+
+/*
+string OCamlCodeGen::ACCESS()
+{
+ ostringstream ret;
+ if ( accessExpr != 0 )
+ INLINE_LIST( ret, accessExpr, 0, false );
+ return ret.str();
+}
+*/
+
+string OCamlCodeGen::make_access(char const* name, GenInlineList* x, bool prefix = true)
+{
+ ostringstream ret;
+ if ( x == 0 )
+ {
+ if (prefix && accessExpr != 0)
+ {
+ INLINE_LIST( ret, accessExpr, 0, false);
+ ret << name;
+ }
+ else
+ ret << name << ".contents"; // ref cell
+ }
+ else {
+ ret << "(";
+ INLINE_LIST( ret, x, 0, false );
+ ret << ")";
+ }
+ return ret.str();
+}
+
+string OCamlCodeGen::P() { return make_access("p", pExpr, false); }
+string OCamlCodeGen::PE() { return make_access("pe", peExpr, false); }
+string OCamlCodeGen::vEOF() { return make_access("eof", eofExpr, false); }
+string OCamlCodeGen::vCS() { return make_access("cs", csExpr); }
+string OCamlCodeGen::TOP() { return make_access("top", topExpr); }
+string OCamlCodeGen::STACK() { return make_access("stack", stackExpr); }
+string OCamlCodeGen::ACT() { return make_access("act", actExpr); }
+string OCamlCodeGen::TOKSTART() { return make_access("ts", tokstartExpr); }
+string OCamlCodeGen::TOKEND() { return make_access("te", tokendExpr); }
+
+string OCamlCodeGen::GET_WIDE_KEY()
+{
+ if ( redFsm->anyConditions() )
+ return "_widec";
+ else
+ { ostringstream ret; ret << "Char.code " << GET_KEY(); return ret.str(); }
+}
+
+string OCamlCodeGen::GET_WIDE_KEY( RedStateAp *state )
+{
+ if ( state->stateCondList.length() > 0 )
+ return "_widec";
+ else
+ { ostringstream ret; ret << "Char.code " << GET_KEY(); return ret.str(); }
+}
+
+/* Write out level number of tabs. Makes the nested binary search nice
+ * looking. */
+string OCamlCodeGen::TABS( int level )
+{
+ string result;
+ while ( level-- > 0 )
+ result += "\t";
+ return result;
+}
+
+/* Write out a key from the fsm code gen. Depends on wether or not the key is
+ * signed. */
+string OCamlCodeGen::KEY( Key key )
+{
+ ostringstream ret;
+ if ( keyOps->isSigned || !hostLang->explicitUnsigned )
+ ret << key.getVal();
+ else
+ ret << (unsigned long) key.getVal() << 'u';
+ return ret.str();
+}
+
+string OCamlCodeGen::ALPHA_KEY( Key key )
+{
+ ostringstream ret;
+ ret << key.getVal();
+ /*
+ if (key.getVal() > 0xFFFF) {
+ ret << key.getVal();
+ } else {
+ ret << "'\\u" << std::hex << std::setw(4) << std::setfill('0') <<
+ key.getVal() << "'";
+ }
+ */
+ //ret << "(char) " << key.getVal();
+ return ret.str();
+}
+
+void OCamlCodeGen::EXEC( ostream &ret, GenInlineItem *item, int targState, int inFinish )
+{
+// The parser gives fexec two children.
+ ret << "begin " << P() << " <- ";
+ INLINE_LIST( ret, item->children, targState, inFinish );
+ ret << " - 1 end; ";
+}
+
+void OCamlCodeGen::LM_SWITCH( ostream &ret, GenInlineItem *item,
+ int targState, int inFinish )
+{
+ bool catch_all = false;
+ ret <<
+ " begin match " << ACT() << " with\n";
+
+ for ( GenInlineList::Iter lma = *item->children; lma.lte(); lma++ ) {
+ /* Write the case label, the action and the case break. */
+ if ( lma->lmId < 0 )
+ {
+ catch_all = true;
+ ret << " | _ ->\n";
+ }
+ else
+ ret << " | " << lma->lmId << " ->\n";
+
+ /* Write the block and close it off. */
+ ret << " begin ";
+ INLINE_LIST( ret, lma->children, targState, inFinish );
+ ret << " end\n";
+ }
+
+ if (!catch_all)
+ ret << " | _ -> assert false\n";
+
+ ret <<
+ " end;\n"
+ "\t";
+}
+
+void OCamlCodeGen::SET_ACT( ostream &ret, GenInlineItem *item )
+{
+ ret << ACT() << " <- " << item->lmId << "; ";
+}
+
+void OCamlCodeGen::SET_TOKEND( ostream &ret, GenInlineItem *item )
+{
+ /* The tokend action sets tokend. */
+ ret << TOKEND() << " <- " << P();
+ if ( item->offset != 0 )
+ out << "+" << item->offset;
+ out << "; ";
+}
+
+void OCamlCodeGen::GET_TOKEND( ostream &ret, GenInlineItem *item )
+{
+ ret << TOKEND();
+}
+
+void OCamlCodeGen::INIT_TOKSTART( ostream &ret, GenInlineItem *item )
+{
+ ret << TOKSTART() << " <- " << NULL_ITEM() << "; ";
+}
+
+void OCamlCodeGen::INIT_ACT( ostream &ret, GenInlineItem *item )
+{
+ ret << ACT() << " <- 0;";
+}
+
+void OCamlCodeGen::SET_TOKSTART( ostream &ret, GenInlineItem *item )
+{
+ ret << TOKSTART() << " <- " << P() << "; ";
+}
+
+void OCamlCodeGen::SUB_ACTION( ostream &ret, GenInlineItem *item,
+ int targState, bool inFinish )
+{
+ if ( item->children->length() > 0 ) {
+ /* Write the block and close it off. */
+ ret << "begin ";
+ INLINE_LIST( ret, item->children, targState, inFinish );
+ ret << " end";
+ }
+}
+
+
+/* Write out an inline tree structure. Walks the list and possibly calls out
+ * to virtual functions than handle language specific items in the tree. */
+void OCamlCodeGen::INLINE_LIST( ostream &ret, GenInlineList *inlineList,
+ int targState, bool inFinish )
+{
+ for ( GenInlineList::Iter item = *inlineList; item.lte(); item++ ) {
+ switch ( item->type ) {
+ case GenInlineItem::Text:
+ ret << item->data;
+ break;
+ case GenInlineItem::Goto:
+ GOTO( ret, item->targState->id, inFinish );
+ break;
+ case GenInlineItem::Call:
+ CALL( ret, item->targState->id, targState, inFinish );
+ break;
+ case GenInlineItem::Next:
+ NEXT( ret, item->targState->id, inFinish );
+ break;
+ case GenInlineItem::Ret:
+ RET( ret, inFinish );
+ break;
+ case GenInlineItem::PChar:
+ ret << P();
+ break;
+ case GenInlineItem::Char:
+ ret << GET_KEY();
+ break;
+ case GenInlineItem::Hold:
+ ret << P() << " <- " << P() << " - 1; ";
+ break;
+ case GenInlineItem::Exec:
+ EXEC( ret, item, targState, inFinish );
+ break;
+ case GenInlineItem::Curs:
+ CURS( ret, inFinish );
+ break;
+ case GenInlineItem::Targs:
+ TARGS( ret, inFinish, targState );
+ break;
+ case GenInlineItem::Entry:
+ ret << item->targState->id;
+ break;
+ case GenInlineItem::GotoExpr:
+ GOTO_EXPR( ret, item, inFinish );
+ break;
+ case GenInlineItem::CallExpr:
+ CALL_EXPR( ret, item, targState, inFinish );
+ break;
+ case GenInlineItem::NextExpr:
+ NEXT_EXPR( ret, item, inFinish );
+ break;
+ case GenInlineItem::LmSwitch:
+ LM_SWITCH( ret, item, targState, inFinish );
+ break;
+ case GenInlineItem::LmSetActId:
+ SET_ACT( ret, item );
+ break;
+ case GenInlineItem::LmSetTokEnd:
+ SET_TOKEND( ret, item );
+ break;
+ case GenInlineItem::LmGetTokEnd:
+ GET_TOKEND( ret, item );
+ break;
+ case GenInlineItem::LmInitTokStart:
+ INIT_TOKSTART( ret, item );
+ break;
+ case GenInlineItem::LmInitAct:
+ INIT_ACT( ret, item );
+ break;
+ case GenInlineItem::LmSetTokStart:
+ SET_TOKSTART( ret, item );
+ break;
+ case GenInlineItem::SubAction:
+ SUB_ACTION( ret, item, targState, inFinish );
+ break;
+ case GenInlineItem::Break:
+ BREAK( ret, targState );
+ break;
+ }
+ }
+}
+/* Write out paths in line directives. Escapes any special characters. */
+string OCamlCodeGen::LDIR_PATH( char *path )
+{
+ ostringstream ret;
+ for ( char *pc = path; *pc != 0; pc++ ) {
+ if ( *pc == '\\' )
+ ret << "\\\\";
+ else
+ ret << *pc;
+ }
+ return ret.str();
+}
+
+void OCamlCodeGen::ACTION( ostream &ret, GenAction *action, int targState, bool inFinish )
+{
+ /* Write the preprocessor line info for going into the source file. */
+ ocamlLineDirective( ret, action->loc.fileName, action->loc.line );
+
+ /* Write the block and close it off. */
+ ret << "\t\tbegin ";
+ INLINE_LIST( ret, action->inlineList, targState, inFinish );
+ ret << " end;\n";
+}
+
+void OCamlCodeGen::CONDITION( ostream &ret, GenAction *condition )
+{
+ ret << "\n";
+ ocamlLineDirective( ret, condition->loc.fileName, condition->loc.line );
+ INLINE_LIST( ret, condition->inlineList, 0, false );
+}
+
+string OCamlCodeGen::ERROR_STATE()
+{
+ ostringstream ret;
+ if ( redFsm->errState != 0 )
+ ret << redFsm->errState->id;
+ else
+ ret << "-1";
+ return ret.str();
+}
+
+string OCamlCodeGen::FIRST_FINAL_STATE()
+{
+ ostringstream ret;
+ if ( redFsm->firstFinState != 0 )
+ ret << redFsm->firstFinState->id;
+ else
+ ret << redFsm->nextStateId;
+ return ret.str();
+}
+
+void OCamlCodeGen::writeInit()
+{
+ out << " begin\n";
+
+ if ( !noCS )
+ out << "\t" << vCS() << " <- " << START() << ";\n";
+
+ /* If there are any calls, then the stack top needs initialization. */
+ if ( redFsm->anyActionCalls() || redFsm->anyActionRets() )
+ out << "\t" << TOP() << " <- 0;\n";
+
+ if ( hasLongestMatch ) {
+ out <<
+ " " << TOKSTART() << " <- " << NULL_ITEM() << ";\n"
+ " " << TOKEND() << " <- " << NULL_ITEM() << ";\n"
+ " " << ACT() << " <- 0;\n";
+ }
+ out << " end;\n";
+}
+
+string OCamlCodeGen::PRE_INCR(string val)
+{
+ ostringstream ret;
+ ret << "(" << val << " <- " << val << " + 1; " << val << ")";
+ return ret.str();
+}
+
+string OCamlCodeGen::POST_INCR(string val)
+{
+ ostringstream ret;
+ ret << "(let temp = " << val << " in " << val << " <- " << val << " + 1; temp)";
+ return ret.str();
+}
+
+string OCamlCodeGen::PRE_DECR(string val)
+{
+ ostringstream ret;
+ ret << "(" << val << " <- " << val << " - 1; " << val << ")";
+ return ret.str();
+}
+
+string OCamlCodeGen::POST_DECR(string val)
+{
+ ostringstream ret;
+ ret << "(let temp = " << val << " in " << val << " <- " << val << " - 1; temp)";
+ return ret.str();
+}
+
+string OCamlCodeGen::DATA_PREFIX()
+{
+ if ( data_prefix.empty() ) // init
+ {
+ data_prefix = string(fsmName) + "_";
+ if (data_prefix.size() > 0)
+ data_prefix[0] = ::tolower(data_prefix[0]); // uncapitalize
+ }
+ if ( !noPrefix )
+ return data_prefix;
+ return "";
+}
+
+/* Emit the alphabet data type. */
+string OCamlCodeGen::ALPH_TYPE()
+{
+ string ret = keyOps->alphType->data1;
+ if ( keyOps->alphType->data2 != 0 ) {
+ ret += " ";
+ ret += + keyOps->alphType->data2;
+ }
+ return ret;
+}
+
+/* Emit the alphabet data type. */
+string OCamlCodeGen::WIDE_ALPH_TYPE()
+{
+ string ret;
+ if ( redFsm->maxKey <= keyOps->maxKey )
+ ret = ALPH_TYPE();
+ else {
+ long long maxKeyVal = redFsm->maxKey.getLongLong();
+ HostType *wideType = keyOps->typeSubsumes( keyOps->isSigned, maxKeyVal );
+ assert( wideType != 0 );
+
+ ret = wideType->data1;
+ if ( wideType->data2 != 0 ) {
+ ret += " ";
+ ret += wideType->data2;
+ }
+ }
+ return ret;
+}
+
+void OCamlCodeGen::STATE_IDS()
+{
+ if ( redFsm->startState != 0 )
+ STATIC_VAR( "int", START() ) << " = " << START_STATE_ID() << TOP_SEP ();
+
+ if ( !noFinal )
+ STATIC_VAR( "int" , FIRST_FINAL() ) << " = " << FIRST_FINAL_STATE() << TOP_SEP();
+
+ if ( !noError )
+ STATIC_VAR( "int", ERROR() ) << " = " << ERROR_STATE() << TOP_SEP();
+
+ out << "\n";
+
+ if ( entryPointNames.length() > 0 ) {
+ for ( EntryNameVect::Iter en = entryPointNames; en.lte(); en++ ) {
+ STATIC_VAR( "int", DATA_PREFIX() + "en_" + *en ) <<
+ " = " << entryPointIds[en.pos()] << TOP_SEP();
+ }
+ out << "\n";
+ }
+}
+
+
+void OCamlCodeGen::writeStart()
+{
+ out << START_STATE_ID();
+}
+
+void OCamlCodeGen::writeFirstFinal()
+{
+ out << FIRST_FINAL_STATE();
+}
+
+void OCamlCodeGen::writeError()
+{
+ out << ERROR_STATE();
+}
+
+string OCamlCodeGen::GET_KEY()
+{
+ ostringstream ret;
+ if ( getKeyExpr != 0 ) {
+ /* Emit the user supplied method of retrieving the key. */
+ ret << "(";
+ INLINE_LIST( ret, getKeyExpr, 0, false );
+ ret << ")";
+ }
+ else {
+ /* Expression for retrieving the key, use simple dereference. */
+ ret << "data.[" << P() << "]";
+ }
+ return ret.str();
+}
+string OCamlCodeGen::NULL_ITEM()
+{
+ return "-1";
+}
+
+string OCamlCodeGen::POINTER()
+{
+ // XXX C# has no pointers
+ // multiple items seperated by commas can also be pointer types.
+ return " ";
+}
+
+string OCamlCodeGen::PTR_CONST()
+{
+ return "";
+}
+
+std::ostream &OCamlCodeGen::OPEN_ARRAY( string type, string name )
+{
+ out << "let " << name << " : " << type << " array = [|" << endl;
+ return out;
+}
+
+std::ostream &OCamlCodeGen::CLOSE_ARRAY()
+{
+ return out << "|]" << TOP_SEP();
+}
+
+string OCamlCodeGen::TOP_SEP()
+{
+ return "\n"; // original syntax
+}
+
+string OCamlCodeGen::ARR_SEP()
+{
+ return "; ";
+}
+
+string OCamlCodeGen::AT(const string& array, const string& index)
+{
+ ostringstream ret;
+ ret << array << ".(" << index << ")";
+ return ret.str();
+}
+
+std::ostream &OCamlCodeGen::STATIC_VAR( string type, string name )
+{
+ out << "let " << name << " : " << type;
+ return out;
+}
+
+string OCamlCodeGen::ARR_OFF( string ptr, string offset )
+{
+ // XXX C# can't do pointer arithmetic
+ return "&" + ptr + "[" + offset + "]";
+}
+
+string OCamlCodeGen::CAST( string type )
+{
+ return "";
+// return "(" + type + ")";
+}
+
+string OCamlCodeGen::UINT( )
+{
+ return "uint";
+}
+
+std::ostream &OCamlCodeGen::SWITCH_DEFAULT()
+{
+ out << " | _ -> ()\n";
+ return out;
+}
+
+string OCamlCodeGen::CTRL_FLOW()
+{
+ return "if true then ";
+}
+
+void OCamlCodeGen::finishRagelDef()
+{
+ if ( codeStyle == GenGoto || codeStyle == GenFGoto ||
+ codeStyle == GenIpGoto || codeStyle == GenSplit )
+ {
+ /* For directly executable machines there is no required state
+ * ordering. Choose a depth-first ordering to increase the
+ * potential for fall-throughs. */
+ redFsm->depthFirstOrdering();
+ }
+ else {
+ /* The frontend will do this for us, but it may be a good idea to
+ * force it if the intermediate file is edited. */
+ redFsm->sortByStateId();
+ }
+
+ /* Choose default transitions and the single transition. */
+ redFsm->chooseDefaultSpan();
+
+ /* Maybe do flat expand, otherwise choose single. */
+ if ( codeStyle == GenFlat || codeStyle == GenFFlat )
+ redFsm->makeFlat();
+ else
+ redFsm->chooseSingle();
+
+ /* If any errors have occured in the input file then don't write anything. */
+ if ( gblErrorCount > 0 )
+ return;
+
+ if ( codeStyle == GenSplit )
+ redFsm->partitionFsm( numSplitPartitions );
+
+ if ( codeStyle == GenIpGoto || codeStyle == GenSplit )
+ redFsm->setInTrans();
+
+ /* Anlayze Machine will find the final action reference counts, among
+ * other things. We will use these in reporting the usage
+ * of fsm directives in action code. */
+ analyzeMachine();
+
+ /* Determine if we should use indicies. */
+ calcIndexSize();
+}
+
+ostream &OCamlCodeGen::source_warning( const InputLoc &loc )
+{
+ cerr << sourceFileName << ":" << loc.line << ":" << loc.col << ": warning: ";
+ return cerr;
+}
+
+ostream &OCamlCodeGen::source_error( const InputLoc &loc )
+{
+ gblErrorCount += 1;
+ assert( sourceFileName != 0 );
+ cerr << sourceFileName << ":" << loc.line << ":" << loc.col << ": ";
+ return cerr;
+}
+
diff --git a/ragel/mlcodegen.h b/ragel/mlcodegen.h
new file mode 100644
index 0000000..3df047b
--- /dev/null
+++ b/ragel/mlcodegen.h
@@ -0,0 +1,205 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _MLCODEGEN_H
+#define _MLCODEGEN_H
+
+#include <iostream>
+#include <string>
+#include <stdio.h>
+#include "common.h"
+#include "gendata.h"
+
+using std::string;
+using std::ostream;
+
+/* Forwards. */
+/*
+struct RedFsmAp;
+struct RedStateAp;
+struct CodeGenData;
+struct GenAction;
+struct NameInst;
+struct GenInlineItem;
+struct GenInlineList;
+struct RedAction;
+struct LongestMatch;
+struct LongestMatchPart;
+*/
+
+/* Integer array line length. */
+#define IALL 8
+
+//string itoa( int i );
+
+/*
+ * class OCamlCodeGen
+ */
+class OCamlCodeGen : public CodeGenData
+{
+public:
+ OCamlCodeGen( ostream &out );
+ virtual ~OCamlCodeGen() {}
+
+ virtual void finishRagelDef();
+ virtual void writeInit();
+ virtual void writeStart();
+ virtual void writeFirstFinal();
+ virtual void writeError();
+
+protected:
+ string data_prefix;
+
+ string FSM_NAME();
+ string START_STATE_ID();
+ ostream &ACTIONS_ARRAY();
+ string GET_WIDE_KEY();
+ string GET_WIDE_KEY( RedStateAp *state );
+ string TABS( int level );
+ string KEY( Key key );
+ string ALPHA_KEY( Key key );
+ string LDIR_PATH( char *path );
+ void ACTION( ostream &ret, GenAction *action, int targState, bool inFinish );
+ void CONDITION( ostream &ret, GenAction *condition );
+ string ALPH_TYPE();
+ string WIDE_ALPH_TYPE();
+ string ARRAY_TYPE( unsigned long maxVal );
+ string ARRAY_TYPE( unsigned long maxVal, bool forceSigned );
+
+ virtual string ARR_OFF( string ptr, string offset );
+ virtual string CAST( string type );
+ virtual string UINT();
+ virtual string NULL_ITEM();
+ virtual string POINTER();
+ virtual string GET_KEY();
+ virtual ostream &SWITCH_DEFAULT();
+
+ string P();
+ string PE();
+ string vEOF();
+
+// string ACCESS();
+ string vCS();
+ string STACK();
+ string TOP();
+ string TOKSTART();
+ string TOKEND();
+ string ACT();
+
+ // ++x
+ string PRE_INCR(string);
+ string PRE_DECR(string);
+
+ // x++
+ string POST_INCR(string);
+ string POST_DECR(string);
+
+ string DATA_PREFIX();
+ string PM() { return "_" + DATA_PREFIX() + "partition_map"; }
+ string C() { return "_" + DATA_PREFIX() + "cond_spaces"; }
+ string CK() { return "_" + DATA_PREFIX() + "cond_keys"; }
+ string K() { return "_" + DATA_PREFIX() + "trans_keys"; }
+ string I() { return "_" + DATA_PREFIX() + "indicies"; }
+ string CO() { return "_" + DATA_PREFIX() + "cond_offsets"; }
+ string KO() { return "_" + DATA_PREFIX() + "key_offsets"; }
+ string IO() { return "_" + DATA_PREFIX() + "index_offsets"; }
+ string CL() { return "_" + DATA_PREFIX() + "cond_lengths"; }
+ string SL() { return "_" + DATA_PREFIX() + "single_lengths"; }
+ string RL() { return "_" + DATA_PREFIX() + "range_lengths"; }
+ string A() { return "_" + DATA_PREFIX() + "actions"; }
+ string TA() { return "_" + DATA_PREFIX() + "trans_actions"; }
+ string TT() { return "_" + DATA_PREFIX() + "trans_targs"; }
+ string TSA() { return "_" + DATA_PREFIX() + "to_state_actions"; }
+ string FSA() { return "_" + DATA_PREFIX() + "from_state_actions"; }
+ string EA() { return "_" + DATA_PREFIX() + "eof_actions"; }
+ string ET() { return "_" + DATA_PREFIX() + "eof_trans"; }
+ string SP() { return "_" + DATA_PREFIX() + "key_spans"; }
+ string CSP() { return "_" + DATA_PREFIX() + "cond_key_spans"; }
+ string START() { return DATA_PREFIX() + "start"; }
+ string ERROR() { return DATA_PREFIX() + "error"; }
+ string FIRST_FINAL() { return DATA_PREFIX() + "first_final"; }
+ string CTXDATA() { return DATA_PREFIX() + "ctxdata"; }
+
+ void INLINE_LIST( ostream &ret, GenInlineList *inlineList, int targState, bool inFinish );
+ virtual void GOTO( ostream &ret, int gotoDest, bool inFinish ) = 0;
+ virtual void CALL( ostream &ret, int callDest, int targState, bool inFinish ) = 0;
+ virtual void NEXT( ostream &ret, int nextDest, bool inFinish ) = 0;
+ virtual void GOTO_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish ) = 0;
+ virtual void NEXT_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish ) = 0;
+ virtual void CALL_EXPR( ostream &ret, GenInlineItem *ilItem,
+ int targState, bool inFinish ) = 0;
+ virtual void RET( ostream &ret, bool inFinish ) = 0;
+ virtual void BREAK( ostream &ret, int targState ) = 0;
+ virtual void CURS( ostream &ret, bool inFinish ) = 0;
+ virtual void TARGS( ostream &ret, bool inFinish, int targState ) = 0;
+ void EXEC( ostream &ret, GenInlineItem *item, int targState, int inFinish );
+ void LM_SWITCH( ostream &ret, GenInlineItem *item, int targState, int inFinish );
+ void SET_ACT( ostream &ret, GenInlineItem *item );
+ void INIT_TOKSTART( ostream &ret, GenInlineItem *item );
+ void INIT_ACT( ostream &ret, GenInlineItem *item );
+ void SET_TOKSTART( ostream &ret, GenInlineItem *item );
+ void SET_TOKEND( ostream &ret, GenInlineItem *item );
+ void GET_TOKEND( ostream &ret, GenInlineItem *item );
+ void SUB_ACTION( ostream &ret, GenInlineItem *item,
+ int targState, bool inFinish );
+ void STATE_IDS();
+
+ string ERROR_STATE();
+ string FIRST_FINAL_STATE();
+
+ virtual string PTR_CONST();
+ virtual ostream &OPEN_ARRAY( string type, string name );
+ virtual ostream &CLOSE_ARRAY();
+ virtual ostream &STATIC_VAR( string type, string name );
+
+ virtual string CTRL_FLOW();
+
+ // toplevel phrase separator
+ string TOP_SEP();
+ // array elements separator
+ string ARR_SEP();
+ // access array
+ string AT(const string& array, const string& index);
+
+ string make_access(char const* name, GenInlineList* x, bool prefix);
+
+ ostream &source_warning(const InputLoc &loc);
+ ostream &source_error(const InputLoc &loc);
+
+ unsigned int arrayTypeSize( unsigned long maxVal );
+
+ bool outLabelUsed;
+ bool testEofUsed;
+ bool againLabelUsed;
+ bool useIndicies;
+
+public:
+ /* Determine if we should use indicies. */
+ virtual void calcIndexSize() {}
+
+ void genLineDirective( ostream &out );
+};
+
+#define MAX(a, b) (a > b ? a : b)
+
+#endif
diff --git a/ragel/mlfflat.cpp b/ragel/mlfflat.cpp
new file mode 100644
index 0000000..9251a9a
--- /dev/null
+++ b/ragel/mlfflat.cpp
@@ -0,0 +1,419 @@
+/*
+ * Copyright 2004-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "ragel.h"
+#include "mlfflat.h"
+#include "redfsm.h"
+#include "gendata.h"
+
+std::ostream &OCamlFFlatCodeGen::TO_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->toStateAction != 0 )
+ act = state->toStateAction->actListId+1;
+ out << act;
+ return out;
+}
+
+std::ostream &OCamlFFlatCodeGen::FROM_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->fromStateAction != 0 )
+ act = state->fromStateAction->actListId+1;
+ out << act;
+ return out;
+}
+
+std::ostream &OCamlFFlatCodeGen::EOF_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->eofAction != 0 )
+ act = state->eofAction->actListId+1;
+ out << act;
+ return out;
+}
+
+/* Write out the function for a transition. */
+std::ostream &OCamlFFlatCodeGen::TRANS_ACTION( RedTransAp *trans )
+{
+ int action = 0;
+ if ( trans->action != 0 )
+ action = trans->action->actListId+1;
+ out << action;
+ return out;
+}
+
+/* Write out the function switch. This switch is keyed on the values
+ * of the func index. */
+std::ostream &OCamlFFlatCodeGen::TO_STATE_ACTION_SWITCH()
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numToStateRefs > 0 ) {
+ /* Write the entry label. */
+ out << "\t| " << redAct->actListId+1 << " ->\n";
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, false );
+
+ out << "\t()\n";
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+/* Write out the function switch. This switch is keyed on the values
+ * of the func index. */
+std::ostream &OCamlFFlatCodeGen::FROM_STATE_ACTION_SWITCH()
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numFromStateRefs > 0 ) {
+ /* Write the entry label. */
+ out << "\t| " << redAct->actListId+1 << " ->\n";
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, false );
+
+ out << "\t()\n";
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &OCamlFFlatCodeGen::EOF_ACTION_SWITCH()
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numEofRefs > 0 ) {
+ /* Write the entry label. */
+ out << "\t| " << redAct->actListId+1 << " ->\n";
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, true );
+
+ out << "\t()\n";
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+/* Write out the function switch. This switch is keyed on the values
+ * of the func index. */
+std::ostream &OCamlFFlatCodeGen::ACTION_SWITCH()
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numTransRefs > 0 ) {
+ /* Write the entry label. */
+ out << "\t| " << redAct->actListId+1 << " ->\n";
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, false );
+
+ out << "\t()\n";
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+void OCamlFFlatCodeGen::writeData()
+{
+ if ( redFsm->anyConditions() ) {
+ OPEN_ARRAY( WIDE_ALPH_TYPE(), CK() );
+ COND_KEYS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondSpan), CSP() );
+ COND_KEY_SPANS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCond), C() );
+ CONDS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondIndexOffset), CO() );
+ COND_INDEX_OFFSET();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ OPEN_ARRAY( WIDE_ALPH_TYPE(), K() );
+ KEYS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxSpan), SP() );
+ KEY_SPANS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxFlatIndexOffset), IO() );
+ FLAT_INDEX_OFFSET();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndex), I() );
+ INDICIES();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxState), TT() );
+ TRANS_TARGS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActListId), TA() );
+ TRANS_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyToStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), TSA() );
+ TO_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyFromStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), FSA() );
+ FROM_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActListId), EA() );
+ EOF_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyEofTrans() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndexOffset+1), ET() );
+ EOF_TRANS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ STATE_IDS();
+
+ out << "type state = { mutable keys : int; mutable trans : int; }"
+ << TOP_SEP();
+
+ out << "exception Goto_match" << TOP_SEP();
+ out << "exception Goto_again" << TOP_SEP();
+ out << "exception Goto_eof_trans" << TOP_SEP();
+}
+
+void OCamlFFlatCodeGen::writeExec()
+{
+ testEofUsed = false;
+ outLabelUsed = false;
+ initVarTypes();
+
+ out <<
+ " begin\n";
+// " " << slenType << " _slen";
+
+// if ( redFsm->anyRegCurStateRef() )
+// out << ", _ps";
+
+// out << ";\n";
+// out << " " << transType << " _trans";
+
+// if ( redFsm->anyConditions() )
+// out << ", _cond";
+
+// out << ";\n";
+
+// out <<
+// " " << "int _keys;\n"
+// " " << indsType << " _inds;\n";
+ /*
+ " " << PTR_CONST() << WIDE_ALPH_TYPE() << POINTER() << "_keys;\n"
+ " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxIndex) << POINTER() << "_inds;\n";*/
+
+ out <<
+ " let state = { keys = 0; trans = 0; } in\n"
+ " let rec do_start () =\n";
+
+// if ( redFsm->anyConditions() ) {
+// out <<
+// " " << condsType << " _conds;\n"
+// " " << WIDE_ALPH_TYPE() << " _widec;\n";
+// }
+
+ if ( !noEnd ) {
+ testEofUsed = true;
+ out <<
+ " if " << P() << " = " << PE() << " then\n"
+ " do_test_eof ()\n"
+ "\telse\n";
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " if " << vCS() << " = " << redFsm->errState->id << " then\n"
+ " do_out ()\n"
+ "\telse\n";
+ }
+ out << "\tdo_resume ()\n";
+
+ out << "and do_resume () =\n";
+
+ if ( redFsm->anyFromStateActions() ) {
+ out <<
+ " begin match " << AT( FSA(), vCS() ) << " with\n";
+ FROM_STATE_ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " end;\n"
+ "\n";
+ }
+
+ if ( redFsm->anyConditions() )
+ COND_TRANSLATE();
+
+ out << "\tbegin try\n";
+ LOCATE_TRANS();
+ out << "\twith Goto_match -> () end;\n";
+
+ out << "\tdo_eof_trans ()\n";
+
+// if ( redFsm->anyEofTrans() )
+ out << "and do_eof_trans () =\n";
+
+ if ( redFsm->anyRegCurStateRef() )
+ out << " let ps = " << vCS() << " in\n";
+
+ out <<
+ " " << vCS() << " <- " << AT( TT() ,"state.trans" ) << ";\n"
+ "\n";
+
+ if ( redFsm->anyRegActions() ) {
+ out <<
+ " begin try if " << AT( TA() , "state.trans" ) << " = 0 then\n"
+ " raise Goto_again;\n"
+ "\n"
+ " match " << AT( TA(), "state.trans" ) << " with\n";
+ ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " with Goto_again -> () end;\n"
+ "\n";
+ }
+ out << "\tdo_again ()\n";
+
+// if ( redFsm->anyRegActions() || redFsm->anyActionGotos() ||
+// redFsm->anyActionCalls() || redFsm->anyActionRets() )
+ out << "\tand do_again () =\n";
+
+ if ( redFsm->anyToStateActions() ) {
+ out <<
+ " begin match " << AT( TSA(), vCS() ) << " with\n";
+ TO_STATE_ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " end;\n"
+ "\n";
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " match " << vCS() << " with\n"
+ "\t| " << redFsm->errState->id << " -> do_out ()\n"
+ "\t| _ ->\n";
+ }
+
+ out << "\t" << P() << " <- " << P() << " + 1;\n";
+
+ if ( !noEnd ) {
+ out <<
+ " if " << P() << " <> " << PE() << " then\n"
+ " do_resume ()\n"
+ "\telse do_test_eof ()\n";
+ }
+ else {
+ out <<
+ " do_resume ()\n";
+ }
+
+// if ( testEofUsed )
+ out << "and do_test_eof () =\n";
+
+ if ( redFsm->anyEofTrans() || redFsm->anyEofActions() ) {
+ out <<
+ " if " << P() << " = " << vEOF() << " then\n"
+ " begin try\n";
+
+ if ( redFsm->anyEofTrans() ) {
+ out <<
+ " if " << AT( ET(), vCS() ) << " > 0 then\n"
+ " begin\n"
+ " state.trans <- " << CAST(transType) << "(" << AT( ET(), vCS() ) << " - 1);\n"
+ " raise Goto_eof_trans;\n"
+ " end;\n";
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ out <<
+ " begin match " << AT( EA(), vCS() ) << " with\n";
+ EOF_ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " end\n";
+ }
+
+ out <<
+ " with Goto_again -> do_again ()\n"
+ " | Goto_eof_trans -> do_eof_trans () end\n"
+ "\n";
+ }
+ else
+ {
+ out << "\t()\n";
+ }
+
+ if ( outLabelUsed )
+ out << " and do_out () = ()\n";
+
+ out << "\tin do_start ()\n";
+ out << " end;\n";
+}
+
diff --git a/ragel/mlfflat.h b/ragel/mlfflat.h
new file mode 100644
index 0000000..242e6b9
--- /dev/null
+++ b/ragel/mlfflat.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2004-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _MLFFLAT_H
+#define _MLFFLAT_H
+
+#include <iostream>
+#include "mlflat.h"
+
+/* Forwards. */
+//struct CodeGenData;
+
+/*
+ * OCamlFFlatCodeGen
+ */
+class OCamlFFlatCodeGen : public OCamlFlatCodeGen
+{
+public:
+ OCamlFFlatCodeGen( ostream &out ) : OCamlFlatCodeGen(out) {}
+private:
+ std::ostream &TO_STATE_ACTION_SWITCH();
+ std::ostream &FROM_STATE_ACTION_SWITCH();
+ std::ostream &EOF_ACTION_SWITCH();
+ std::ostream &ACTION_SWITCH();
+
+ virtual std::ostream &TO_STATE_ACTION( RedStateAp *state );
+ virtual std::ostream &FROM_STATE_ACTION( RedStateAp *state );
+ virtual std::ostream &EOF_ACTION( RedStateAp *state );
+ virtual std::ostream &TRANS_ACTION( RedTransAp *trans );
+
+ virtual void writeData();
+ virtual void writeExec();
+};
+
+#endif
diff --git a/ragel/mlflat.cpp b/ragel/mlflat.cpp
new file mode 100644
index 0000000..5307b6e
--- /dev/null
+++ b/ragel/mlflat.cpp
@@ -0,0 +1,911 @@
+/*
+ * Copyright 2004-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <sstream>
+#include "ragel.h"
+#include "mlflat.h"
+#include "redfsm.h"
+#include "gendata.h"
+
+std::ostream &OCamlFlatCodeGen::TO_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->toStateAction != 0 )
+ act = state->toStateAction->location+1;
+ out << act;
+ return out;
+}
+
+std::ostream &OCamlFlatCodeGen::FROM_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->fromStateAction != 0 )
+ act = state->fromStateAction->location+1;
+ out << act;
+ return out;
+}
+
+std::ostream &OCamlFlatCodeGen::EOF_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->eofAction != 0 )
+ act = state->eofAction->location+1;
+ out << act;
+ return out;
+}
+
+std::ostream &OCamlFlatCodeGen::TRANS_ACTION( RedTransAp *trans )
+{
+ /* If there are actions, emit them. Otherwise emit zero. */
+ int act = 0;
+ if ( trans->action != 0 )
+ act = trans->action->location+1;
+ out << act;
+ return out;
+}
+
+std::ostream &OCamlFlatCodeGen::TO_STATE_ACTION_SWITCH()
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numToStateRefs > 0 ) {
+ /* Write the case label, the action and the case break */
+ out << "\t| " << act->actionId << " ->\n";
+ ACTION( out, act, 0, false );
+ out << "\t()\n";
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &OCamlFlatCodeGen::FROM_STATE_ACTION_SWITCH()
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numFromStateRefs > 0 ) {
+ /* Write the case label, the action and the case break */
+ out << "\t| " << act->actionId << " ->\n";
+ ACTION( out, act, 0, false );
+ out << "\t()\n";
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &OCamlFlatCodeGen::EOF_ACTION_SWITCH()
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numEofRefs > 0 ) {
+ /* Write the case label, the action and the case break */
+ out << "\t| " << act->actionId << " ->\n";
+ ACTION( out, act, 0, true );
+ out << "\t()\n";
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+
+std::ostream &OCamlFlatCodeGen::ACTION_SWITCH()
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numTransRefs > 0 ) {
+ /* Write the case label, the action and the case break */
+ out << "\t| " << act->actionId << " ->\n";
+ ACTION( out, act, 0, false );
+ out << "\t()\n";
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+
+std::ostream &OCamlFlatCodeGen::FLAT_INDEX_OFFSET()
+{
+ out << "\t";
+ int totalStateNum = 0, curIndOffset = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write the index offset. */
+ out << curIndOffset;
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+
+ /* Move the index offset ahead. */
+ if ( st->transList != 0 )
+ curIndOffset += keyOps->span( st->lowKey, st->highKey );
+
+ if ( st->defTrans != 0 )
+ curIndOffset += 1;
+ }
+ out << "\n";
+ return out;
+}
+
+std::ostream &OCamlFlatCodeGen::KEY_SPANS()
+{
+ out << "\t";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write singles length. */
+ unsigned long long span = 0;
+ if ( st->transList != 0 )
+ span = keyOps->span( st->lowKey, st->highKey );
+ out << span;
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ return out;
+}
+
+std::ostream &OCamlFlatCodeGen::TO_STATE_ACTIONS()
+{
+ out << "\t";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write any eof action. */
+ TO_STATE_ACTION(st);
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ return out;
+}
+
+std::ostream &OCamlFlatCodeGen::FROM_STATE_ACTIONS()
+{
+ out << "\t";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write any eof action. */
+ FROM_STATE_ACTION(st);
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ return out;
+}
+
+std::ostream &OCamlFlatCodeGen::EOF_ACTIONS()
+{
+ out << "\t";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write any eof action. */
+ EOF_ACTION(st);
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ return out;
+}
+
+std::ostream &OCamlFlatCodeGen::EOF_TRANS()
+{
+ out << "\t";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write any eof action. */
+
+ long trans = 0;
+ if ( st->eofTrans != 0 ) {
+ assert( st->eofTrans->pos >= 0 );
+ trans = st->eofTrans->pos+1;
+ }
+ out << trans;
+
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ return out;
+}
+
+
+std::ostream &OCamlFlatCodeGen::COND_KEYS()
+{
+ out << '\t';
+ int totalTrans = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Emit just cond low key and cond high key. */
+ out << ALPHA_KEY( st->condLowKey ) << ARR_SEP();
+ out << ALPHA_KEY( st->condHighKey ) << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+
+ /* Output one last number so we don't have to figure out when the last
+ * entry is and avoid writing a comma. */
+ out << /*"(char) " <<*/ 0 << "\n";
+ return out;
+}
+
+std::ostream &OCamlFlatCodeGen::COND_KEY_SPANS()
+{
+ out << "\t";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write singles length. */
+ unsigned long long span = 0;
+ if ( st->condList != 0 )
+ span = keyOps->span( st->condLowKey, st->condHighKey );
+ out << span;
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ return out;
+}
+
+std::ostream &OCamlFlatCodeGen::CONDS()
+{
+ int totalTrans = 0;
+ out << '\t';
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ if ( st->condList != 0 ) {
+ /* Walk the singles. */
+ unsigned long long span = keyOps->span( st->condLowKey, st->condHighKey );
+ for ( unsigned long long pos = 0; pos < span; pos++ ) {
+ if ( st->condList[pos] != 0 )
+ out << st->condList[pos]->condSpaceId + 1 << ARR_SEP();
+ else
+ out << "0" << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ }
+
+ /* Output one last number so we don't have to figure out when the last
+ * entry is and avoid writing a comma. */
+ out << 0 << "\n";
+ return out;
+}
+
+std::ostream &OCamlFlatCodeGen::COND_INDEX_OFFSET()
+{
+ out << "\t";
+ int totalStateNum = 0, curIndOffset = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write the index offset. */
+ out << curIndOffset;
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+
+ /* Move the index offset ahead. */
+ if ( st->condList != 0 )
+ curIndOffset += keyOps->span( st->condLowKey, st->condHighKey );
+ }
+ out << "\n";
+ return out;
+}
+
+
+std::ostream &OCamlFlatCodeGen::KEYS()
+{
+ out << '\t';
+ int totalTrans = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Emit just low key and high key. */
+ out << ALPHA_KEY( st->lowKey ) << ARR_SEP();
+ out << ALPHA_KEY( st->highKey ) << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+
+ /* Output one last number so we don't have to figure out when the last
+ * entry is and avoid writing a comma. */
+ out << /*"(char) " <<*/ 0 << "\n";
+ return out;
+}
+
+std::ostream &OCamlFlatCodeGen::INDICIES()
+{
+ int totalTrans = 0;
+ out << '\t';
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ if ( st->transList != 0 ) {
+ /* Walk the singles. */
+ unsigned long long span = keyOps->span( st->lowKey, st->highKey );
+ for ( unsigned long long pos = 0; pos < span; pos++ ) {
+ out << st->transList[pos]->id << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+
+ /* The state's default index goes next. */
+ if ( st->defTrans != 0 )
+ out << st->defTrans->id << ARR_SEP();
+
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+
+ /* Output one last number so we don't have to figure out when the last
+ * entry is and avoid writing a comma. */
+ out << 0 << "\n";
+ return out;
+}
+
+std::ostream &OCamlFlatCodeGen::TRANS_TARGS()
+{
+ /* Transitions must be written ordered by their id. */
+ RedTransAp **transPtrs = new RedTransAp*[redFsm->transSet.length()];
+ for ( TransApSet::Iter trans = redFsm->transSet; trans.lte(); trans++ )
+ transPtrs[trans->id] = trans;
+
+ /* Keep a count of the num of items in the array written. */
+ out << '\t';
+ int totalStates = 0;
+ for ( int t = 0; t < redFsm->transSet.length(); t++ ) {
+ /* Record the position, need this for eofTrans. */
+ RedTransAp *trans = transPtrs[t];
+ trans->pos = t;
+
+ /* Write out the target state. */
+ out << trans->targ->id;
+ if ( t < redFsm->transSet.length()-1 ) {
+ out << ARR_SEP();
+ if ( ++totalStates % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ delete[] transPtrs;
+ return out;
+}
+
+
+std::ostream &OCamlFlatCodeGen::TRANS_ACTIONS()
+{
+ /* Transitions must be written ordered by their id. */
+ RedTransAp **transPtrs = new RedTransAp*[redFsm->transSet.length()];
+ for ( TransApSet::Iter trans = redFsm->transSet; trans.lte(); trans++ )
+ transPtrs[trans->id] = trans;
+
+ /* Keep a count of the num of items in the array written. */
+ out << '\t';
+ int totalAct = 0;
+ for ( int t = 0; t < redFsm->transSet.length(); t++ ) {
+ /* Write the function for the transition. */
+ RedTransAp *trans = transPtrs[t];
+ TRANS_ACTION( trans );
+ if ( t < redFsm->transSet.length()-1 ) {
+ out << ARR_SEP();
+ if ( ++totalAct % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ delete[] transPtrs;
+ return out;
+}
+
+void OCamlFlatCodeGen::LOCATE_TRANS()
+{
+ std::ostringstream temp;
+ temp << "inds + (\n"
+ " if slen > 0 && " << AT( K(), "keys" ) << " <= " << GET_WIDE_KEY() << " &&\n"
+ " " << GET_WIDE_KEY() << " <= " << AT( K(), "keys+1" ) << " then\n"
+ " " << GET_WIDE_KEY() << " - " << AT(K(), "keys" ) << " else slen)";
+ out <<
+ " let keys = " << vCS() << " lsl 1 in\n"
+ " let inds = " << AT( IO(), vCS() ) << " in\n"
+ "\n"
+ " let slen = " << AT( SP(), vCS() ) << " in\n"
+ " state.trans <- " << AT( I(), temp.str() ) << ";\n"
+ "\n";
+}
+
+void OCamlFlatCodeGen::GOTO( ostream &ret, int gotoDest, bool inFinish )
+{
+ ret << "begin " << vCS() << " <- " << gotoDest << "; " <<
+ CTRL_FLOW() << "raise Goto_again end";
+}
+
+void OCamlFlatCodeGen::GOTO_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish )
+{
+ ret << "begin " << vCS() << " <- (";
+ INLINE_LIST( ret, ilItem->children, 0, inFinish );
+ ret << "); " << CTRL_FLOW() << " raise Goto_again end";
+}
+
+void OCamlFlatCodeGen::CURS( ostream &ret, bool inFinish )
+{
+ ret << "(_ps)";
+}
+
+void OCamlFlatCodeGen::TARGS( ostream &ret, bool inFinish, int targState )
+{
+ ret << "(" << vCS() << ")";
+}
+
+void OCamlFlatCodeGen::NEXT( ostream &ret, int nextDest, bool inFinish )
+{
+ ret << vCS() << " <- " << nextDest << ";";
+}
+
+void OCamlFlatCodeGen::NEXT_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish )
+{
+ ret << vCS() << " <- (";
+ INLINE_LIST( ret, ilItem->children, 0, inFinish );
+ ret << ");";
+}
+
+void OCamlFlatCodeGen::CALL( ostream &ret, int callDest, int targState, bool inFinish )
+{
+ if ( prePushExpr != 0 ) {
+ ret << "begin ";
+ INLINE_LIST( ret, prePushExpr, 0, false );
+ }
+
+ ret << "begin " << AT( STACK(), POST_INCR(TOP()) ) << " <- " << vCS() << "; ";
+ ret << vCS() << " <- " << callDest << "; " << CTRL_FLOW() << "raise Goto_again end ";
+
+ if ( prePushExpr != 0 )
+ ret << "end";
+}
+
+void OCamlFlatCodeGen::CALL_EXPR( ostream &ret, GenInlineItem *ilItem, int targState, bool inFinish )
+{
+ if ( prePushExpr != 0 ) {
+ ret << "begin ";
+ INLINE_LIST( ret, prePushExpr, 0, false );
+ }
+
+ ret << "begin " << AT(STACK(), POST_INCR(TOP()) ) << " <- " << vCS() << "; " << vCS() << " <- (";
+ INLINE_LIST( ret, ilItem->children, targState, inFinish );
+ ret << "); " << CTRL_FLOW() << "raise Goto_again end ";
+
+ if ( prePushExpr != 0 )
+ ret << "end";
+}
+
+void OCamlFlatCodeGen::RET( ostream &ret, bool inFinish )
+{
+ ret << "begin " << vCS() << " <- " << AT(STACK(), PRE_DECR(TOP()) ) << "; ";
+
+ if ( postPopExpr != 0 ) {
+ ret << "begin ";
+ INLINE_LIST( ret, postPopExpr, 0, false );
+ ret << "end ";
+ }
+
+ ret << CTRL_FLOW() << "raise Goto_again end";
+}
+
+void OCamlFlatCodeGen::BREAK( ostream &ret, int targState )
+{
+ outLabelUsed = true;
+ ret << "begin " << P() << " <- " << P() << " + 1; " << CTRL_FLOW() << "raise Goto_out end";
+}
+
+void OCamlFlatCodeGen::writeData()
+{
+ /* If there are any transtion functions then output the array. If there
+ * are none, don't bother emitting an empty array that won't be used. */
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActArrItem), A() );
+ ACTIONS_ARRAY();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyConditions() ) {
+ OPEN_ARRAY( WIDE_ALPH_TYPE(), CK() );
+ COND_KEYS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondSpan), CSP() );
+ COND_KEY_SPANS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCond), C() );
+ CONDS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondIndexOffset), CO() );
+ COND_INDEX_OFFSET();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ OPEN_ARRAY( WIDE_ALPH_TYPE(), K() );
+ KEYS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxSpan), SP() );
+ KEY_SPANS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxFlatIndexOffset), IO() );
+ FLAT_INDEX_OFFSET();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndex), I() );
+ INDICIES();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxState), TT() );
+ TRANS_TARGS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), TA() );
+ TRANS_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyToStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), TSA() );
+ TO_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyFromStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), FSA() );
+ FROM_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), EA() );
+ EOF_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyEofTrans() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndexOffset+1), ET() );
+ EOF_TRANS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ STATE_IDS();
+
+ out << "type state = { mutable trans : int; mutable acts : int; mutable nacts : int; }"
+ << TOP_SEP();
+
+ out << "exception Goto_match" << TOP_SEP();
+ out << "exception Goto_again" << TOP_SEP();
+ out << "exception Goto_eof_trans" << TOP_SEP();
+}
+
+void OCamlFlatCodeGen::COND_TRANSLATE()
+{
+ out <<
+ " _widec = " << GET_KEY() << ";\n";
+
+ out <<
+ " _keys = " << vCS() << "<<1;\n"
+ " _conds = " << CO() << "[" << vCS() << "];\n"
+// " _keys = " << ARR_OFF( CK(), "(" + vCS() + "<<1)" ) << ";\n"
+// " _conds = " << ARR_OFF( C(), CO() + "[" + vCS() + "]" ) << ";\n"
+ "\n"
+ " _slen = " << CSP() << "[" << vCS() << "];\n"
+ " if (_slen > 0 && " << CK() << "[_keys] <="
+ << GET_WIDE_KEY() << " &&\n"
+ " " << GET_WIDE_KEY() << " <= " << CK() << "[_keys+1])\n"
+ " _cond = " << C() << "[_conds+" << GET_WIDE_KEY() << " - " <<
+ CK() << "[_keys]];\n"
+ " else\n"
+ " _cond = 0;"
+ "\n";
+ /* XXX This version of the code doesn't work because Mono is weird. Works
+ * fine in Microsoft's csc, even though the bug report filed claimed it
+ * didn't.
+ " _slen = " << CSP() << "[" << vCS() << "];\n"
+ " _cond = _slen > 0 && " << CK() << "[_keys] <="
+ << GET_WIDE_KEY() << " &&\n"
+ " " << GET_WIDE_KEY() << " <= " << CK() << "[_keys+1] ?\n"
+ " " << C() << "[_conds+" << GET_WIDE_KEY() << " - " << CK()
+ << "[_keys]] : 0;\n"
+ "\n";
+ */
+ out <<
+ " switch ( _cond ) {\n";
+ for ( CondSpaceList::Iter csi = condSpaceList; csi.lte(); csi++ ) {
+ GenCondSpace *condSpace = csi;
+ out << " case " << condSpace->condSpaceId + 1 << ": {\n";
+ out << TABS(2) << "_widec = " << CAST(WIDE_ALPH_TYPE()) << "(" <<
+ KEY(condSpace->baseKey) << " + (" << GET_KEY() <<
+ " - " << KEY(keyOps->minKey) << "));\n";
+
+ for ( GenCondSet::Iter csi = condSpace->condSet; csi.lte(); csi++ ) {
+ out << TABS(2) << "if ( ";
+ CONDITION( out, *csi );
+ Size condValOffset = ((1 << csi.pos()) * keyOps->alphSize());
+ out << " ) _widec += " << condValOffset << ";\n";
+ }
+
+ out << " }\n";
+ out << " break;\n";
+ }
+
+ SWITCH_DEFAULT();
+
+ out <<
+ " }\n";
+}
+
+void OCamlFlatCodeGen::writeExec()
+{
+ testEofUsed = false;
+ outLabelUsed = false;
+ initVarTypes();
+
+ out <<
+ " begin\n";
+// " " << slenType << " _slen";
+
+// if ( redFsm->anyRegCurStateRef() )
+// out << ", _ps";
+
+// out <<
+// " " << transType << " _trans";
+
+// if ( redFsm->anyConditions() )
+// out << ", _cond";
+// out << ";\n";
+
+// if ( redFsm->anyToStateActions() ||
+// redFsm->anyRegActions() || redFsm->anyFromStateActions() )
+// {
+// out <<
+// " int _acts;\n"
+// " int _nacts;\n";
+// }
+
+// out <<
+// " " << "int _keys;\n"
+// " " << indsType << " _inds;\n";
+ /*
+ " " << PTR_CONST() << WIDE_ALPH_TYPE() << POINTER() << "_keys;\n"
+ " " << PTR_CONST() << ARRAY_TYPE(redFsm->maxIndex) << POINTER() << "_inds;\n";*/
+
+ if ( redFsm->anyConditions() ) {
+ out <<
+ " " << condsType << " _conds;\n"
+ " " << WIDE_ALPH_TYPE() << " _widec;\n";
+ }
+
+ out << "\n";
+
+ out <<
+ " let state = { trans = 0; acts = 0; nacts = 0; } in\n"
+ " let rec do_start () =\n";
+
+ if ( !noEnd ) {
+ testEofUsed = true;
+ out <<
+ " if " << P() << " = " << PE() << " then\n"
+ " do_test_eof ()\n"
+ "\telse\n";
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " if " << vCS() << " = " << redFsm->errState->id << " then\n"
+ " do_out ()\n"
+ "\telse\n";
+ }
+
+ out << "\tdo_resume ()\n";
+
+ out << "and do_resume () =\n";
+
+ if ( redFsm->anyFromStateActions() ) {
+ out <<
+ " state.acts <- " << AT( FSA(), vCS() ) << ";\n"
+ " state.nacts <- " << AT( A(), POST_INCR("state.acts") ) << ";\n"
+ " while " << POST_DECR("state.nacts") << " > 0 do\n"
+ " begin match " << AT( A(), POST_INCR("state.acts") ) << " with\n";
+ FROM_STATE_ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " end\n"
+ " done;\n"
+ "\n";
+ }
+
+ if ( redFsm->anyConditions() )
+ COND_TRANSLATE();
+
+// out << "\tbegin try\n";
+ LOCATE_TRANS();
+// out << "\twith Goto_match -> () end;\n";
+
+ out << "\tdo_eof_trans ()\n";
+
+// if ( redFsm->anyEofTrans() )
+ out << "and do_eof_trans () =\n";
+
+ if ( redFsm->anyRegCurStateRef() )
+ out << " let ps = " << vCS() << " in\n";
+
+ out <<
+ " " << vCS() << " <- " << AT( TT() ,"state.trans" ) << ";\n"
+ "\n";
+
+ if ( redFsm->anyRegActions() ) {
+ out <<
+ "\tbegin try\n"
+ " match " << AT( TA(), "state.trans" ) << " with\n"
+ "\t| 0 -> raise Goto_again\n"
+ "\t| _ ->\n"
+ " state.acts <- " << AT( TA(), "state.trans" ) << ";\n"
+ " state.nacts <- " << AT( A(), POST_INCR("state.acts") ) << ";\n"
+ " while " << POST_DECR("state.nacts") << " > 0 do\n"
+ " begin match " << AT( A(), POST_INCR("state.acts") ) << " with\n";
+ ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " end;\n"
+ " done\n"
+ "\twith Goto_again -> () end;\n";
+ }
+ out << "\tdo_again ()\n";
+
+// if ( redFsm->anyRegActions() || redFsm->anyActionGotos() ||
+// redFsm->anyActionCalls() || redFsm->anyActionRets() )
+ out << "\tand do_again () =\n";
+
+ if ( redFsm->anyToStateActions() ) {
+ out <<
+ " state.acts <- " << AT( TSA(), vCS() ) << ";\n"
+ " state.nacts <- " << AT( A(), POST_INCR("state.acts") ) << ";\n"
+ " while " << POST_DECR("state.nacts") << " > 0 do\n"
+ " begin match " << AT( A(), POST_INCR("state.acts") ) << " with\n";
+ TO_STATE_ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " end\n"
+ " done;\n"
+ "\n";
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " match " << vCS() << " with\n"
+ "\t| " << redFsm->errState->id << " -> do_out ()\n"
+ "\t| _ ->\n";
+ }
+
+ out << "\t" << P() << " <- " << P() << " + 1;\n";
+
+ if ( !noEnd ) {
+ out <<
+ " if " << P() << " <> " << PE() << " then\n"
+ " do_resume ()\n"
+ "\telse do_test_eof ()\n";
+ }
+ else {
+ out <<
+ " do_resume ()\n";
+ }
+
+// if ( testEofUsed )
+ out << "and do_test_eof () =\n";
+
+ if ( redFsm->anyEofTrans() || redFsm->anyEofActions() ) {
+ out <<
+ " if " << P() << " = " << vEOF() << " then\n"
+ " begin try\n";
+
+ if ( redFsm->anyEofTrans() ) {
+ out <<
+ " if " << AT( ET(), vCS() ) << " > 0 then\n"
+ " begin\n"
+ " state.trans <- " << CAST(transType) << "(" << AT( ET(), vCS() ) << " - 1);\n"
+ " raise Goto_eof_trans;\n"
+ " end\n";
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ out <<
+ " let __acts = ref " << AT( EA(), vCS() ) << " in\n"
+ " let __nacts = ref " << AT( A(), "!__acts" ) << " in\n"
+ " incr __acts;\n"
+ " while !__nacts > 0 do\n"
+ " decr __nacts;\n"
+ " begin match " << AT( A(), POST_INCR("__acts.contents") ) << " with\n";
+ EOF_ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " end;\n"
+ " done\n";
+ }
+
+ out <<
+ " with Goto_again -> do_again ()\n"
+ " | Goto_eof_trans -> do_eof_trans () end\n"
+ "\n";
+ }
+ else
+ {
+ out << "\t()\n";
+ }
+
+ if ( outLabelUsed )
+ out << " and do_out () = ()\n";
+
+ out << "\tin do_start ()\n";
+ out << " end;\n";
+}
+
+void OCamlFlatCodeGen::initVarTypes()
+{
+ slenType = ARRAY_TYPE(MAX(redFsm->maxSpan, redFsm->maxCondSpan));
+ transType = ARRAY_TYPE(redFsm->maxIndex+1);
+ indsType = ARRAY_TYPE(redFsm->maxFlatIndexOffset);
+ condsType = ARRAY_TYPE(redFsm->maxCondIndexOffset);
+}
diff --git a/ragel/mlflat.h b/ragel/mlflat.h
new file mode 100644
index 0000000..6da1819
--- /dev/null
+++ b/ragel/mlflat.h
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2004-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _MLFLAT_H
+#define _MLFLAT_H
+
+#include <iostream>
+#include "mlcodegen.h"
+
+/* Forwards. */
+//struct CodeGenData;
+//struct NameInst;
+//struct RedTransAp;
+//struct RedStateAp;
+
+/*
+ * OCamlFlatCodeGen
+ */
+class OCamlFlatCodeGen : public OCamlCodeGen
+{
+public:
+ OCamlFlatCodeGen( ostream &out ) : OCamlCodeGen(out) {}
+ virtual ~OCamlFlatCodeGen() { }
+
+protected:
+ std::ostream &TO_STATE_ACTION_SWITCH();
+ std::ostream &FROM_STATE_ACTION_SWITCH();
+ std::ostream &EOF_ACTION_SWITCH();
+ std::ostream &ACTION_SWITCH();
+ std::ostream &KEYS();
+ std::ostream &INDICIES();
+ std::ostream &FLAT_INDEX_OFFSET();
+ std::ostream &KEY_SPANS();
+ std::ostream &TO_STATE_ACTIONS();
+ std::ostream &FROM_STATE_ACTIONS();
+ std::ostream &EOF_ACTIONS();
+ std::ostream &EOF_TRANS();
+ std::ostream &TRANS_TARGS();
+ std::ostream &TRANS_ACTIONS();
+ void LOCATE_TRANS();
+
+ std::ostream &COND_INDEX_OFFSET();
+ void COND_TRANSLATE();
+ std::ostream &CONDS();
+ std::ostream &COND_KEYS();
+ std::ostream &COND_KEY_SPANS();
+
+ void GOTO( ostream &ret, int gotoDest, bool inFinish );
+ void CALL( ostream &ret, int callDest, int targState, bool inFinish );
+ void NEXT( ostream &ret, int nextDest, bool inFinish );
+ void GOTO_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish );
+ void NEXT_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish );
+ void CALL_EXPR( ostream &ret, GenInlineItem *ilItem, int targState, bool inFinish );
+ void CURS( ostream &ret, bool inFinish );
+ void TARGS( ostream &ret, bool inFinish, int targState );
+ void RET( ostream &ret, bool inFinish );
+ void BREAK( ostream &ret, int targState );
+
+ virtual std::ostream &TO_STATE_ACTION( RedStateAp *state );
+ virtual std::ostream &FROM_STATE_ACTION( RedStateAp *state );
+ virtual std::ostream &EOF_ACTION( RedStateAp *state );
+ virtual std::ostream &TRANS_ACTION( RedTransAp *trans );
+
+ virtual void writeData();
+ virtual void writeExec();
+
+ void initVarTypes();
+ string slenType, transType, indsType, condsType;
+};
+
+#endif
diff --git a/ragel/mlftable.cpp b/ragel/mlftable.cpp
new file mode 100644
index 0000000..7cf258e
--- /dev/null
+++ b/ragel/mlftable.cpp
@@ -0,0 +1,462 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "ragel.h"
+#include "mlftable.h"
+#include "redfsm.h"
+#include "gendata.h"
+
+/* Determine if we should use indicies or not. */
+void OCamlFTabCodeGen::calcIndexSize()
+{
+ int sizeWithInds = 0, sizeWithoutInds = 0;
+
+ /* Calculate cost of using with indicies. */
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ int totalIndex = st->outSingle.length() + st->outRange.length() +
+ (st->defTrans == 0 ? 0 : 1);
+ sizeWithInds += arrayTypeSize(redFsm->maxIndex) * totalIndex;
+ }
+ sizeWithInds += arrayTypeSize(redFsm->maxState) * redFsm->transSet.length();
+ if ( redFsm->anyActions() )
+ sizeWithInds += arrayTypeSize(redFsm->maxActListId) * redFsm->transSet.length();
+
+ /* Calculate the cost of not using indicies. */
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ int totalIndex = st->outSingle.length() + st->outRange.length() +
+ (st->defTrans == 0 ? 0 : 1);
+ sizeWithoutInds += arrayTypeSize(redFsm->maxState) * totalIndex;
+ if ( redFsm->anyActions() )
+ sizeWithoutInds += arrayTypeSize(redFsm->maxActListId) * totalIndex;
+ }
+
+ /* If using indicies reduces the size, use them. */
+ useIndicies = sizeWithInds < sizeWithoutInds;
+}
+
+std::ostream &OCamlFTabCodeGen::TO_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->toStateAction != 0 )
+ act = state->toStateAction->actListId+1;
+ out << act;
+ return out;
+}
+
+std::ostream &OCamlFTabCodeGen::FROM_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->fromStateAction != 0 )
+ act = state->fromStateAction->actListId+1;
+ out << act;
+ return out;
+}
+
+std::ostream &OCamlFTabCodeGen::EOF_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->eofAction != 0 )
+ act = state->eofAction->actListId+1;
+ out << act;
+ return out;
+}
+
+
+/* Write out the function for a transition. */
+std::ostream &OCamlFTabCodeGen::TRANS_ACTION( RedTransAp *trans )
+{
+ int action = 0;
+ if ( trans->action != 0 )
+ action = trans->action->actListId+1;
+ out << action;
+ return out;
+}
+
+/* Write out the function switch. This switch is keyed on the values
+ * of the func index. */
+std::ostream &OCamlFTabCodeGen::TO_STATE_ACTION_SWITCH()
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numToStateRefs > 0 ) {
+ /* Write the entry label. */
+ out << "\t| " << redAct->actListId+1 << " ->\n";
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, false );
+
+ out << "\t()\n";
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+/* Write out the function switch. This switch is keyed on the values
+ * of the func index. */
+std::ostream &OCamlFTabCodeGen::FROM_STATE_ACTION_SWITCH()
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numFromStateRefs > 0 ) {
+ /* Write the entry label. */
+ out << "\t| " << redAct->actListId+1 << " ->\n";
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, false );
+
+ out << "\t()\n";
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &OCamlFTabCodeGen::EOF_ACTION_SWITCH()
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numEofRefs > 0 ) {
+ /* Write the entry label. */
+ out << "\t| " << redAct->actListId+1 << " ->\n";
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, true );
+
+ out << "\t()\n";
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+/* Write out the function switch. This switch is keyed on the values
+ * of the func index. */
+std::ostream &OCamlFTabCodeGen::ACTION_SWITCH()
+{
+ /* Loop the actions. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numTransRefs > 0 ) {
+ /* Write the entry label. */
+ out << "\t| " << redAct->actListId+1 << " ->\n";
+
+ /* Write each action in the list of action items. */
+ for ( GenActionTable::Iter item = redAct->key; item.lte(); item++ )
+ ACTION( out, item->value, 0, false );
+
+ out << "\t()\n";
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+void OCamlFTabCodeGen::writeData()
+{
+ if ( redFsm->anyConditions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondOffset), CO() );
+ COND_OFFSETS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondLen), CL() );
+ COND_LENS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( WIDE_ALPH_TYPE(), CK() );
+ COND_KEYS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondSpaceId), C() );
+ COND_SPACES();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxKeyOffset), KO() );
+ KEY_OFFSETS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( WIDE_ALPH_TYPE(), K() );
+ KEYS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxSingleLen), SL() );
+ SINGLE_LENS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxRangeLen), RL() );
+ RANGE_LENS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndexOffset), IO() );
+ INDEX_OFFSETS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ if ( useIndicies ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndex), I() );
+ INDICIES();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxState), TT() );
+ TRANS_TARGS_WI();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActListId), TA() );
+ TRANS_ACTIONS_WI();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+ }
+ else {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxState), TT() );
+ TRANS_TARGS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActListId), TA() );
+ TRANS_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+ }
+
+ if ( redFsm->anyToStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), TSA() );
+ TO_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyFromStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), FSA() );
+ FROM_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActListId), EA() );
+ EOF_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyEofTrans() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndexOffset+1), ET() );
+ EOF_TRANS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ STATE_IDS();
+
+ out << "type state = { mutable keys : int; mutable trans : int; }"
+ << TOP_SEP();
+
+ out << "exception Goto_match" << TOP_SEP();
+ out << "exception Goto_again" << TOP_SEP();
+ out << "exception Goto_eof_trans" << TOP_SEP();
+}
+
+void OCamlFTabCodeGen::writeExec()
+{
+ testEofUsed = false;
+ outLabelUsed = false;
+ initVarTypes();
+
+ out <<
+ " begin\n";
+
+// if ( redFsm->anyRegCurStateRef() )
+// out << klenType ", _ps";
+
+ out <<
+ " let state = { keys = 0; trans = 0; } in\n"
+ " let rec do_start () =\n";
+
+// if ( redFsm->anyConditions() )
+// out << " " << WIDE_ALPH_TYPE() << " _widec;\n";
+
+ if ( !noEnd ) {
+ testEofUsed = true;
+ out <<
+ " if " << P() << " = " << PE() << " then\n"
+ " do_test_eof ()\n"
+ "\telse\n";
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " if " << vCS() << " = " << redFsm->errState->id << " then\n"
+ " do_out ()\n"
+ "\telse\n";
+ }
+ out << "\tdo_resume ()\n";
+
+ out << "and do_resume () =\n";
+
+ if ( redFsm->anyFromStateActions() ) {
+ out <<
+ " begin match " << AT( FSA(), vCS() ) << " with\n";
+ FROM_STATE_ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " end;\n"
+ "\n";
+ }
+
+ if ( redFsm->anyConditions() )
+ COND_TRANSLATE();
+
+ out << "\tbegin try\n";
+ LOCATE_TRANS();
+ out << "\twith Goto_match -> () end;\n";
+
+ out <<
+ "\tdo_match ()\n";
+
+ out << "and do_match () =\n";
+
+ if ( useIndicies )
+ out << " state.trans <- " << CAST(transType) << AT( I(), "state.trans" ) << ";\n";
+
+ out << "\tdo_eof_trans ()\n";
+
+// if ( redFsm->anyEofTrans() )
+ out << "and do_eof_trans () =\n";
+
+ if ( redFsm->anyRegCurStateRef() )
+ out << " let ps = " << vCS() << " in\n";
+
+ out <<
+ " " << vCS() << " <- " << AT( TT() ,"state.trans" ) << ";\n"
+ "\n";
+
+ if ( redFsm->anyRegActions() ) {
+ out <<
+ " begin try if " << AT( TA() , "state.trans" ) << " = 0 then\n"
+ " raise Goto_again;\n"
+ "\n"
+ " match " << AT( TA(), "state.trans" ) << " with\n";
+ ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " with Goto_again -> () end;\n"
+ "\n";
+ }
+ out << "\tdo_again ()\n";
+
+// if ( redFsm->anyRegActions() || redFsm->anyActionGotos() ||
+// redFsm->anyActionCalls() || redFsm->anyActionRets() )
+ out << "\tand do_again () =\n";
+
+ if ( redFsm->anyToStateActions() ) {
+ out <<
+ " begin match " << AT( TSA(), vCS() ) << " with\n";
+ TO_STATE_ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " end;\n"
+ "\n";
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " match " << vCS() << " with\n"
+ "\t| " << redFsm->errState->id << " -> do_out ()\n"
+ "\t| _ ->\n";
+ }
+
+ out << "\t" << P() << " <- " << P() << " + 1;\n";
+
+ if ( !noEnd ) {
+ out <<
+ " if " << P() << " <> " << PE() << " then\n"
+ " do_resume ()\n"
+ "\telse do_test_eof ()\n";
+ }
+ else {
+ out <<
+ " do_resume ()\n";
+ }
+
+// if ( testEofUsed )
+ out << "and do_test_eof () =\n";
+
+ if ( redFsm->anyEofTrans() || redFsm->anyEofActions() ) {
+ out <<
+ " if " << P() << " = " << vEOF() << " then\n"
+ " begin try\n";
+
+ if ( redFsm->anyEofTrans() ) {
+ out <<
+ " if " << AT( ET(), vCS() ) << " > 0 then\n"
+ " begin\n"
+ " state.trans <- " << CAST(transType) << "(" << AT( ET(), vCS() ) << " - 1);\n"
+ " raise Goto_eof_trans;\n"
+ " end;\n";
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ out <<
+ " begin match " << AT( EA(), vCS() ) << " with\n";
+ EOF_ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " end\n";
+ }
+
+ out <<
+ " with Goto_again -> do_again ()\n"
+ " | Goto_eof_trans -> do_eof_trans () end\n"
+ "\n";
+ }
+ else
+ {
+ out << "\t()\n";
+ }
+
+ if ( outLabelUsed )
+ out << " and do_out () = ()\n";
+
+ out << "\tin do_start ()\n";
+ out << " end;\n";
+}
+
diff --git a/ragel/mlftable.h b/ragel/mlftable.h
new file mode 100644
index 0000000..da88e84
--- /dev/null
+++ b/ragel/mlftable.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _MLFTABLE_H
+#define _MLFTABLE_H
+
+#include <iostream>
+#include "mltable.h"
+
+/* Forwards. */
+//struct CodeGenData;
+
+
+/*
+ * OCamlFTabCodeGen
+ */
+class OCamlFTabCodeGen : public OCamlTabCodeGen
+{
+public:
+ OCamlFTabCodeGen( ostream &out ) : OCamlTabCodeGen(out) {}
+private:
+ std::ostream &TO_STATE_ACTION_SWITCH();
+ std::ostream &FROM_STATE_ACTION_SWITCH();
+ std::ostream &EOF_ACTION_SWITCH();
+ std::ostream &ACTION_SWITCH();
+
+ virtual std::ostream &TO_STATE_ACTION( RedStateAp *state );
+ virtual std::ostream &FROM_STATE_ACTION( RedStateAp *state );
+ virtual std::ostream &EOF_ACTION( RedStateAp *state );
+ virtual std::ostream &TRANS_ACTION( RedTransAp *trans );
+ virtual void writeData();
+ virtual void writeExec();
+ virtual void calcIndexSize();
+};
+
+#endif
diff --git a/ragel/mlgoto.cpp b/ragel/mlgoto.cpp
new file mode 100644
index 0000000..0c9d298
--- /dev/null
+++ b/ragel/mlgoto.cpp
@@ -0,0 +1,821 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "ragel.h"
+#include "mlgoto.h"
+#include "redfsm.h"
+#include "bstmap.h"
+#include "gendata.h"
+
+/* Emit the goto to take for a given transition. */
+std::ostream &OCamlGotoCodeGen::TRANS_GOTO( RedTransAp *trans, int level )
+{
+ out << TABS(level) << "tr" << trans->id << " ()";
+ return out;
+}
+
+std::ostream &OCamlGotoCodeGen::TO_STATE_ACTION_SWITCH()
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numToStateRefs > 0 ) {
+ /* Write the case label, the action and the case break. */
+ out << "\t| " << act->actionId << " ->\n";
+ ACTION( out, act, 0, false );
+ out << "\t()\n";
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &OCamlGotoCodeGen::FROM_STATE_ACTION_SWITCH()
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numFromStateRefs > 0 ) {
+ /* Write the case label, the action and the case break. */
+ out << "\t| " << act->actionId << " ->\n";
+ ACTION( out, act, 0, false );
+ out << "\t()\n";
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &OCamlGotoCodeGen::EOF_ACTION_SWITCH()
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numEofRefs > 0 ) {
+ /* Write the case label, the action and the case break. */
+ out << "\t| " << act->actionId << " ->\n";
+ ACTION( out, act, 0, true );
+ out << "\t()\n";
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &OCamlGotoCodeGen::ACTION_SWITCH()
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numTransRefs > 0 ) {
+ /* Write the case label, the action and the case break. */
+ out << "\t| " << act->actionId << " ->\n";
+ ACTION( out, act, 0, false );
+ out << "\t()\n";
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+void OCamlGotoCodeGen::GOTO_HEADER( RedStateAp *state )
+{
+ /* Label the state. */
+ out << "| " << state->id << " ->\n";
+}
+
+
+void OCamlGotoCodeGen::emitSingleSwitch( RedStateAp *state )
+{
+ /* Load up the singles. */
+ int numSingles = state->outSingle.length();
+ RedTransEl *data = state->outSingle.data;
+
+ if ( numSingles == 1 ) {
+ /* If there is a single single key then write it out as an if. */
+ out << "\tif " << GET_WIDE_KEY(state) << " = " <<
+ KEY(data[0].lowKey) << " then\n\t\t";
+
+ /* Virtual function for writing the target of the transition. */
+ TRANS_GOTO(data[0].value, 0) << " else\n";
+ }
+ else if ( numSingles > 1 ) {
+ /* Write out single keys in a switch if there is more than one. */
+ out << "\tmatch " << GET_WIDE_KEY(state) << " with\n";
+
+ /* Write out the single indicies. */
+ for ( int j = 0; j < numSingles; j++ ) {
+ out << "\t\t| " << ALPHA_KEY(data[j].lowKey) << " -> ";
+ TRANS_GOTO(data[j].value, 0) << "\n";
+ }
+
+ out << "\t\t| _ ->\n";
+ }
+}
+
+void OCamlGotoCodeGen::emitRangeBSearch( RedStateAp *state, int level, int low, int high, RedTransAp* def)
+{
+ /* Get the mid position, staying on the lower end of the range. */
+ int mid = (low + high) >> 1;
+ RedTransEl *data = state->outRange.data;
+
+ /* Determine if we need to look higher or lower. */
+ bool anyLower = mid > low;
+ bool anyHigher = mid < high;
+
+ /* Determine if the keys at mid are the limits of the alphabet. */
+ bool limitLow = data[mid].lowKey == keyOps->minKey;
+ bool limitHigh = data[mid].highKey == keyOps->maxKey;
+
+ if ( anyLower && anyHigher ) {
+ /* Can go lower and higher than mid. */
+ out << TABS(level) << "if " << GET_WIDE_KEY(state) << " < " <<
+ KEY(data[mid].lowKey) << " then begin\n";
+ emitRangeBSearch( state, level+1, low, mid-1, def );
+ out << TABS(level) << " end else if " << GET_WIDE_KEY(state) << " > " <<
+ KEY(data[mid].highKey) << " then begin\n";
+ emitRangeBSearch( state, level+1, mid+1, high, def );
+ out << TABS(level) << " end else\n";
+ TRANS_GOTO(data[mid].value, level+1) << "\n";
+ }
+ else if ( anyLower && !anyHigher ) {
+ /* Can go lower than mid but not higher. */
+ out << TABS(level) << "if " << GET_WIDE_KEY(state) << " < " <<
+ KEY(data[mid].lowKey) << " then begin\n";
+ emitRangeBSearch( state, level+1, low, mid-1, def );
+
+ /* if the higher is the highest in the alphabet then there is no
+ * sense testing it. */
+ if ( limitHigh ) {
+ out << TABS(level) << " end else\n";
+ TRANS_GOTO(data[mid].value, level+1) << "\n";
+ }
+ else {
+ out << TABS(level) << " end else if " << GET_WIDE_KEY(state) << " <= " <<
+ KEY(data[mid].highKey) << " then\n";
+ TRANS_GOTO(data[mid].value, level+1) << "\n" << TABS(level) << "else\n";
+ TRANS_GOTO(def, level+1) << "\n";
+ }
+ }
+ else if ( !anyLower && anyHigher ) {
+ /* Can go higher than mid but not lower. */
+ out << TABS(level) << "if " << GET_WIDE_KEY(state) << " > " <<
+ KEY(data[mid].highKey) << " then begin\n";
+ emitRangeBSearch( state, level+1, mid+1, high, def );
+
+ /* If the lower end is the lowest in the alphabet then there is no
+ * sense testing it. */
+ if ( limitLow ) {
+ out << TABS(level) << " end else\n";
+ TRANS_GOTO(data[mid].value, level+1) << "\n";
+ }
+ else {
+ out << TABS(level) << " end else if " << GET_WIDE_KEY(state) << " >= " <<
+ KEY(data[mid].lowKey) << " then\n";
+ TRANS_GOTO(data[mid].value, level+1) << "\n" << TABS(level) << "else\n";
+ TRANS_GOTO(def, level+1) << "\n";
+ }
+ }
+ else {
+ /* Cannot go higher or lower than mid. It's mid or bust. What
+ * tests to do depends on limits of alphabet. */
+ if ( !limitLow && !limitHigh ) {
+ out << TABS(level) << "if " << KEY(data[mid].lowKey) << " <= " <<
+ GET_WIDE_KEY(state) << " && " << GET_WIDE_KEY(state) << " <= " <<
+ KEY(data[mid].highKey) << " then\n";
+ TRANS_GOTO(data[mid].value, level+1) << "\n" << TABS(level) << "else\n";
+ TRANS_GOTO(def, level+1) << "\n";
+ }
+ else if ( limitLow && !limitHigh ) {
+ out << TABS(level) << "if " << GET_WIDE_KEY(state) << " <= " <<
+ KEY(data[mid].highKey) << " then\n";
+ TRANS_GOTO(data[mid].value, level+1) << "\n" << TABS(level) << "else\n";
+ TRANS_GOTO(def, level+1) << "\n";
+ }
+ else if ( !limitLow && limitHigh ) {
+ out << TABS(level) << "if " << KEY(data[mid].lowKey) << " <= " <<
+ GET_WIDE_KEY(state) << " then\n";
+ TRANS_GOTO(data[mid].value, level+1) << "\n" << TABS(level) << "else\n";
+ TRANS_GOTO(def, level+1) << "\n";
+ }
+ else {
+ /* Both high and low are at the limit. No tests to do. */
+ TRANS_GOTO(data[mid].value, level+1) << "\n";
+ }
+ }
+}
+
+void OCamlGotoCodeGen::STATE_GOTO_ERROR()
+{
+ /* Label the state and bail immediately. */
+ outLabelUsed = true;
+ RedStateAp *state = redFsm->errState;
+ out << "| " << state->id << " ->\n";
+ out << " do_out ()\n";
+}
+
+void OCamlGotoCodeGen::COND_TRANSLATE( GenStateCond *stateCond, int level )
+{
+ GenCondSpace *condSpace = stateCond->condSpace;
+ out << TABS(level) << "_widec = " << CAST(WIDE_ALPH_TYPE()) << "(" <<
+ KEY(condSpace->baseKey) << " + (" << GET_KEY() <<
+ " - " << KEY(keyOps->minKey) << "));\n";
+
+ for ( GenCondSet::Iter csi = condSpace->condSet; csi.lte(); csi++ ) {
+ out << TABS(level) << "if ( ";
+ CONDITION( out, *csi );
+ Size condValOffset = ((1 << csi.pos()) * keyOps->alphSize());
+ out << " ) _widec += " << condValOffset << ";\n";
+ }
+}
+
+void OCamlGotoCodeGen::emitCondBSearch( RedStateAp *state, int level, int low, int high )
+{
+ /* Get the mid position, staying on the lower end of the range. */
+ int mid = (low + high) >> 1;
+ GenStateCond **data = state->stateCondVect.data;
+
+ /* Determine if we need to look higher or lower. */
+ bool anyLower = mid > low;
+ bool anyHigher = mid < high;
+
+ /* Determine if the keys at mid are the limits of the alphabet. */
+ bool limitLow = data[mid]->lowKey == keyOps->minKey;
+ bool limitHigh = data[mid]->highKey == keyOps->maxKey;
+
+ if ( anyLower && anyHigher ) {
+ /* Can go lower and higher than mid. */
+ out << TABS(level) << "if ( " << GET_KEY() << " < " <<
+ KEY(data[mid]->lowKey) << " ) {\n";
+ emitCondBSearch( state, level+1, low, mid-1 );
+ out << TABS(level) << "} else if ( " << GET_KEY() << " > " <<
+ KEY(data[mid]->highKey) << " ) {\n";
+ emitCondBSearch( state, level+1, mid+1, high );
+ out << TABS(level) << "} else {\n";
+ COND_TRANSLATE(data[mid], level+1);
+ out << TABS(level) << "}\n";
+ }
+ else if ( anyLower && !anyHigher ) {
+ /* Can go lower than mid but not higher. */
+ out << TABS(level) << "if ( " << GET_KEY() << " < " <<
+ KEY(data[mid]->lowKey) << " ) {\n";
+ emitCondBSearch( state, level+1, low, mid-1 );
+
+ /* if the higher is the highest in the alphabet then there is no
+ * sense testing it. */
+ if ( limitHigh ) {
+ out << TABS(level) << "} else {\n";
+ COND_TRANSLATE(data[mid], level+1);
+ out << TABS(level) << "}\n";
+ }
+ else {
+ out << TABS(level) << "} else if ( " << GET_KEY() << " <= " <<
+ KEY(data[mid]->highKey) << " ) {\n";
+ COND_TRANSLATE(data[mid], level+1);
+ out << TABS(level) << "}\n";
+ }
+ }
+ else if ( !anyLower && anyHigher ) {
+ /* Can go higher than mid but not lower. */
+ out << TABS(level) << "if ( " << GET_KEY() << " > " <<
+ KEY(data[mid]->highKey) << " ) {\n";
+ emitCondBSearch( state, level+1, mid+1, high );
+
+ /* If the lower end is the lowest in the alphabet then there is no
+ * sense testing it. */
+ if ( limitLow ) {
+ out << TABS(level) << "} else {\n";
+ COND_TRANSLATE(data[mid], level+1);
+ out << TABS(level) << "}\n";
+ }
+ else {
+ out << TABS(level) << "} else if ( " << GET_KEY() << " >= " <<
+ KEY(data[mid]->lowKey) << " ) {\n";
+ COND_TRANSLATE(data[mid], level+1);
+ out << TABS(level) << "}\n";
+ }
+ }
+ else {
+ /* Cannot go higher or lower than mid. It's mid or bust. What
+ * tests to do depends on limits of alphabet. */
+ if ( !limitLow && !limitHigh ) {
+ out << TABS(level) << "if ( " << KEY(data[mid]->lowKey) << " <= " <<
+ GET_KEY() << " && " << GET_KEY() << " <= " <<
+ KEY(data[mid]->highKey) << " ) {\n";
+ COND_TRANSLATE(data[mid], level+1);
+ out << TABS(level) << "}\n";
+ }
+ else if ( limitLow && !limitHigh ) {
+ out << TABS(level) << "if ( " << GET_KEY() << " <= " <<
+ KEY(data[mid]->highKey) << " ) {\n";
+ COND_TRANSLATE(data[mid], level+1);
+ out << TABS(level) << "}\n";
+ }
+ else if ( !limitLow && limitHigh ) {
+ out << TABS(level) << "if ( " << KEY(data[mid]->lowKey) << " <= " <<
+ GET_KEY() << " )\n {";
+ COND_TRANSLATE(data[mid], level+1);
+ out << TABS(level) << "}\n";
+ }
+ else {
+ /* Both high and low are at the limit. No tests to do. */
+ COND_TRANSLATE(data[mid], level);
+ }
+ }
+}
+
+std::ostream &OCamlGotoCodeGen::STATE_GOTOS()
+{
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ if ( st == redFsm->errState )
+ STATE_GOTO_ERROR();
+ else {
+ /* Writing code above state gotos. */
+ GOTO_HEADER( st );
+ out << "\tbegin\n";
+
+ if ( st->stateCondVect.length() > 0 ) {
+ out << " _widec = " << GET_KEY() << ";\n";
+ emitCondBSearch( st, 1, 0, st->stateCondVect.length() - 1 );
+ }
+
+ /* Try singles. */
+ if ( st->outSingle.length() > 0 )
+ emitSingleSwitch( st );
+
+ /* Default case is to binary search for the ranges, if that fails then */
+ if ( st->outRange.length() > 0 )
+ emitRangeBSearch( st, 1, 0, st->outRange.length() - 1, st->defTrans );
+ else
+ /* Write the default transition. */
+ TRANS_GOTO( st->defTrans, 1 ) << "\n";
+
+ out << "\tend\n";
+ }
+ }
+ return out;
+}
+
+std::ostream &OCamlGotoCodeGen::TRANSITIONS()
+{
+ /* Emit any transitions that have functions and that go to
+ * this state. */
+ for ( TransApSet::Iter trans = redFsm->transSet; trans.lte(); trans++ ) {
+ /* Write the label for the transition so it can be jumped to. */
+ out << " and tr" << trans->id << " () = ";
+
+ /* Destination state. */
+ if ( trans->action != 0 && trans->action->anyCurStateRef() )
+ out << "_ps = " << vCS() << ";";
+ out << vCS() << " <- " << trans->targ->id << "; ";
+
+ if ( trans->action != 0 ) {
+ /* Write out the transition func. */
+ out << "f" << trans->action->actListId << " ()\n";
+ }
+ else {
+ /* No code to execute, just loop around. */
+ out << "do_again ()\n";
+ }
+ }
+ return out;
+}
+
+std::ostream &OCamlGotoCodeGen::EXEC_FUNCS()
+{
+ /* Make labels that set acts and jump to execFuncs. Loop func indicies. */
+ for ( GenActionTableMap::Iter redAct = redFsm->actionMap; redAct.lte(); redAct++ ) {
+ if ( redAct->numTransRefs > 0 ) {
+ out << " and f" << redAct->actListId << " () = " <<
+ "state.acts <- " << itoa( redAct->location+1 ) << "; "
+ "execFuncs ()\n";
+ }
+ }
+
+ out <<
+ "\n"
+ "and execFuncs () =\n"
+ " state.nacts <- " << AT( A(), POST_INCR( "state.acts") ) << ";\n"
+ " begin try while " << POST_DECR("state.nacts") << " > 0 do\n"
+ " match " << AT( A(), POST_INCR("state.acts") ) << " with\n";
+ ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " done with Goto_again -> () end;\n"
+ " do_again ()\n";
+ return out;
+}
+
+unsigned int OCamlGotoCodeGen::TO_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->toStateAction != 0 )
+ act = state->toStateAction->location+1;
+ return act;
+}
+
+unsigned int OCamlGotoCodeGen::FROM_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->fromStateAction != 0 )
+ act = state->fromStateAction->location+1;
+ return act;
+}
+
+unsigned int OCamlGotoCodeGen::EOF_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->eofAction != 0 )
+ act = state->eofAction->location+1;
+ return act;
+}
+
+std::ostream &OCamlGotoCodeGen::TO_STATE_ACTIONS()
+{
+ /* Take one off for the psuedo start state. */
+ int numStates = redFsm->stateList.length();
+ unsigned int *vals = new unsigned int[numStates];
+ memset( vals, 0, sizeof(unsigned int)*numStates );
+
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ )
+ vals[st->id] = TO_STATE_ACTION(st);
+
+ out << "\t";
+ for ( int st = 0; st < redFsm->nextStateId; st++ ) {
+ /* Write any eof action. */
+ out << vals[st];
+ if ( st < numStates-1 ) {
+ out << ARR_SEP();
+ if ( (st+1) % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ delete[] vals;
+ return out;
+}
+
+std::ostream &OCamlGotoCodeGen::FROM_STATE_ACTIONS()
+{
+ /* Take one off for the psuedo start state. */
+ int numStates = redFsm->stateList.length();
+ unsigned int *vals = new unsigned int[numStates];
+ memset( vals, 0, sizeof(unsigned int)*numStates );
+
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ )
+ vals[st->id] = FROM_STATE_ACTION(st);
+
+ out << "\t";
+ for ( int st = 0; st < redFsm->nextStateId; st++ ) {
+ /* Write any eof action. */
+ out << vals[st];
+ if ( st < numStates-1 ) {
+ out << ARR_SEP();
+ if ( (st+1) % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ delete[] vals;
+ return out;
+}
+
+std::ostream &OCamlGotoCodeGen::EOF_ACTIONS()
+{
+ /* Take one off for the psuedo start state. */
+ int numStates = redFsm->stateList.length();
+ unsigned int *vals = new unsigned int[numStates];
+ memset( vals, 0, sizeof(unsigned int)*numStates );
+
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ )
+ vals[st->id] = EOF_ACTION(st);
+
+ out << "\t";
+ for ( int st = 0; st < redFsm->nextStateId; st++ ) {
+ /* Write any eof action. */
+ out << vals[st];
+ if ( st < numStates-1 ) {
+ out << ARR_SEP();
+ if ( (st+1) % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ delete[] vals;
+ return out;
+}
+
+std::ostream &OCamlGotoCodeGen::FINISH_CASES()
+{
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* States that are final and have an out action need a case. */
+ if ( st->eofAction != 0 ) {
+ /* Write the case label. */
+ out << "\t\t| " << st->id << " -> ";
+
+ /* Write the goto func. */
+ out << "f" << st->eofAction->actListId << " ()\n";
+ }
+ }
+
+ return out;
+}
+
+void OCamlGotoCodeGen::GOTO( ostream &ret, int gotoDest, bool inFinish )
+{
+ ret << "begin " << vCS() << " <- " << gotoDest << "; " <<
+ CTRL_FLOW() << "raise Goto_again end";
+}
+
+void OCamlGotoCodeGen::GOTO_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish )
+{
+ ret << "begin " << vCS() << " <- (";
+ INLINE_LIST( ret, ilItem->children, 0, inFinish );
+ ret << "); " << CTRL_FLOW() << "raise Goto_again end";
+}
+
+void OCamlGotoCodeGen::CURS( ostream &ret, bool inFinish )
+{
+ ret << "(_ps)";
+}
+
+void OCamlGotoCodeGen::TARGS( ostream &ret, bool inFinish, int targState )
+{
+ ret << "(" << vCS() << ")";
+}
+
+void OCamlGotoCodeGen::NEXT( ostream &ret, int nextDest, bool inFinish )
+{
+ ret << vCS() << " <- " << nextDest << ";";
+}
+
+void OCamlGotoCodeGen::NEXT_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish )
+{
+ ret << vCS() << " <- (";
+ INLINE_LIST( ret, ilItem->children, 0, inFinish );
+ ret << ");";
+}
+
+void OCamlGotoCodeGen::CALL( ostream &ret, int callDest, int targState, bool inFinish )
+{
+ if ( prePushExpr != 0 ) {
+ ret << "begin ";
+ INLINE_LIST( ret, prePushExpr, 0, false );
+ }
+
+ ret << "begin " << AT( STACK(), POST_INCR(TOP()) ) << " <- " << vCS() << "; ";
+ ret << vCS() << " <- " << callDest << "; " << CTRL_FLOW() << "raise Goto_again end ";
+
+ if ( prePushExpr != 0 )
+ ret << "end";
+}
+
+void OCamlGotoCodeGen::CALL_EXPR( ostream &ret, GenInlineItem *ilItem, int targState, bool inFinish )
+{
+ if ( prePushExpr != 0 ) {
+ ret << "begin ";
+ INLINE_LIST( ret, prePushExpr, 0, false );
+ }
+
+ ret << "begin " << AT(STACK(), POST_INCR(TOP()) ) << " <- " << vCS() << "; " << vCS() << " <- (";
+ INLINE_LIST( ret, ilItem->children, targState, inFinish );
+ ret << "); " << CTRL_FLOW() << "raise Goto_again end ";
+
+ if ( prePushExpr != 0 )
+ ret << "end";
+}
+
+void OCamlGotoCodeGen::RET( ostream &ret, bool inFinish )
+{
+ ret << "begin " << vCS() << " <- " << AT(STACK(), PRE_DECR(TOP()) ) << "; ";
+
+ if ( postPopExpr != 0 ) {
+ ret << "begin ";
+ INLINE_LIST( ret, postPopExpr, 0, false );
+ ret << "end ";
+ }
+
+ ret << CTRL_FLOW() << "raise Goto_again end";
+}
+
+void OCamlGotoCodeGen::BREAK( ostream &ret, int targState )
+{
+ outLabelUsed = true;
+ ret << "begin " << P() << " <- " << P() << " + 1; " << CTRL_FLOW() << "raise Goto_out end";
+}
+
+void OCamlGotoCodeGen::writeData()
+{
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActArrItem), A() );
+ ACTIONS_ARRAY();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyToStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), TSA() );
+ TO_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyFromStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), FSA() );
+ FROM_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), EA() );
+ EOF_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ STATE_IDS();
+
+ out << "type state = { mutable acts : " << ARRAY_TYPE(redFsm->maxActionLoc) <<
+ " ; mutable nacts : " << ARRAY_TYPE(redFsm->maxActArrItem) << "; }"
+ << TOP_SEP();
+
+ out << "exception Goto_again" << TOP_SEP();
+}
+
+void OCamlGotoCodeGen::writeExec()
+{
+ testEofUsed = false;
+ outLabelUsed = false;
+
+ out << " begin\n";
+
+// if ( redFsm->anyRegCurStateRef() )
+// out << " int _ps = 0;\n";
+
+ if ( redFsm->anyToStateActions() || redFsm->anyRegActions()
+ || redFsm->anyFromStateActions() )
+ {
+ out << " let state = { acts = 0; nacts = 0; } in\n";
+ }
+
+// if ( redFsm->anyConditions() )
+// out << " " << WIDE_ALPH_TYPE() << " _widec;\n";
+
+ out << "\n";
+ out << " let rec do_start () =\n";
+
+ if ( !noEnd ) {
+ testEofUsed = true;
+ out <<
+ " if " << P() << " = " << PE() << " then\n"
+ " do_test_eof ()\n"
+ "\telse\n";
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " if " << vCS() << " = " << redFsm->errState->id << " then\n"
+ " do_out ()\n"
+ "\telse\n";
+ }
+ out << "\tdo_resume ()\n";
+
+ out << "and do_resume () =\n";
+
+ if ( redFsm->anyFromStateActions() ) {
+ out <<
+ " state.acts <- " << AT( FSA(), vCS() ) << ";\n"
+ " state.nacts <- " << AT( A(), POST_INCR("state.acts") ) << ";\n"
+ " while " << POST_DECR("state.nacts") << " > 0 do\n"
+ " begin match " << AT( A(), POST_INCR("state.acts") ) << " with\n";
+ FROM_STATE_ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " end\n"
+ " done;\n"
+ "\n";
+ }
+
+ out <<
+ " begin match " << vCS() << " with\n";
+ STATE_GOTOS();
+ SWITCH_DEFAULT() <<
+ " end\n"
+ "\n";
+ TRANSITIONS() <<
+ "\n";
+
+ if ( redFsm->anyRegActions() )
+ EXEC_FUNCS() << "\n";
+
+// if ( redFsm->anyRegActions() || redFsm->anyActionGotos() ||
+// redFsm->anyActionCalls() || redFsm->anyActionRets() )
+ out << "\tand do_again () =\n";
+
+ if ( redFsm->anyToStateActions() ) {
+ out <<
+ " state.acts <- " << AT( TSA(), vCS() ) << ";\n"
+ " state.nacts <- " << AT( A(), POST_INCR("state.acts") ) << ";\n"
+ " while " << POST_DECR("state.nacts") << " > 0 do\n"
+ " begin match " << AT( A(), POST_INCR("state.acts") ) << " with\n";
+ TO_STATE_ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " end\n"
+ " done;\n"
+ "\n";
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " match " << vCS() << " with\n"
+ "\t| " << redFsm->errState->id << " -> do_out ()\n"
+ "\t| _ ->\n";
+ }
+
+ out << "\t" << P() << " <- " << P() << " + 1;\n";
+
+ if ( !noEnd ) {
+ out <<
+ " if " << P() << " <> " << PE() << " then\n"
+ " do_resume ()\n"
+ "\telse do_test_eof ()\n";
+ }
+ else {
+ out <<
+ " do_resume ()\n";
+ }
+
+// if ( testEofUsed )
+ out << "and do_test_eof () =\n";
+
+ if ( redFsm->anyEofTrans() || redFsm->anyEofActions() ) {
+ out <<
+ " if " << P() << " = " << vEOF() << " then\n"
+ " begin\n";
+
+ if ( redFsm->anyEofTrans() ) {
+ out <<
+ " match " << vCS() << " with\n";
+
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ if ( st->eofTrans != 0 )
+ out << " | " << st->id << " -> tr" << st->eofTrans->id << " ()\n";
+ }
+
+ out << "\t| _ -> ();\n";
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ out <<
+ " let __acts = ref " << AT( EA(), vCS() ) << " in\n"
+ " let __nacts = ref " << AT( A(), "!__acts" ) << " in\n"
+ " incr __acts;\n"
+ " begin try while !__nacts > 0 do\n"
+ " decr __nacts;\n"
+ " begin match " << AT( A(), POST_INCR("__acts.contents") ) << " with\n";
+ EOF_ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " end;\n"
+ " done with Goto_again -> do_again () end;\n";
+ }
+
+ out <<
+ " end\n"
+ "\n";
+ }
+ else
+ {
+ out << "\t()\n";
+ }
+
+ if ( outLabelUsed )
+ out << " and do_out () = ()\n";
+
+ out << "\tin do_start ()\n";
+ out << " end;\n";
+}
diff --git a/ragel/mlgoto.h b/ragel/mlgoto.h
new file mode 100644
index 0000000..50aeb32
--- /dev/null
+++ b/ragel/mlgoto.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _MLGOTO_H
+#define _MLGOTO_H
+
+#include <iostream>
+#include "mlcodegen.h"
+
+/* Forwards. */
+//struct CodeGenData;
+//struct NameInst;
+//struct RedTransAp;
+//struct RedStateAp;
+//struct GenStateCond;
+
+/*
+ * OCamlGotoCodeGen
+ */
+class OCamlGotoCodeGen : virtual public OCamlCodeGen
+{
+public:
+ OCamlGotoCodeGen( ostream &out ) : OCamlCodeGen(out) {}
+ std::ostream &TO_STATE_ACTION_SWITCH();
+ std::ostream &FROM_STATE_ACTION_SWITCH();
+ std::ostream &EOF_ACTION_SWITCH();
+ std::ostream &ACTION_SWITCH();
+ std::ostream &STATE_GOTOS();
+ std::ostream &TRANSITIONS();
+ std::ostream &EXEC_FUNCS();
+ std::ostream &FINISH_CASES();
+
+ void GOTO( ostream &ret, int gotoDest, bool inFinish );
+ void CALL( ostream &ret, int callDest, int targState, bool inFinish );
+ void NEXT( ostream &ret, int nextDest, bool inFinish );
+ void GOTO_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish );
+ void NEXT_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish );
+ void CALL_EXPR( ostream &ret, GenInlineItem *ilItem, int targState, bool inFinish );
+ void CURS( ostream &ret, bool inFinish );
+ void TARGS( ostream &ret, bool inFinish, int targState );
+ void RET( ostream &ret, bool inFinish );
+ void BREAK( ostream &ret, int targState );
+
+ virtual unsigned int TO_STATE_ACTION( RedStateAp *state );
+ virtual unsigned int FROM_STATE_ACTION( RedStateAp *state );
+ virtual unsigned int EOF_ACTION( RedStateAp *state );
+
+ std::ostream &TO_STATE_ACTIONS();
+ std::ostream &FROM_STATE_ACTIONS();
+ std::ostream &EOF_ACTIONS();
+
+ void COND_TRANSLATE( GenStateCond *stateCond, int level );
+ void emitCondBSearch( RedStateAp *state, int level, int low, int high );
+ void STATE_CONDS( RedStateAp *state, bool genDefault );
+
+ virtual std::ostream &TRANS_GOTO( RedTransAp *trans, int level );
+
+ void emitSingleSwitch( RedStateAp *state );
+ void emitRangeBSearch( RedStateAp *state, int level, int low, int high, RedTransAp* def );
+
+ /* Called from STATE_GOTOS just before writing the gotos */
+ virtual void GOTO_HEADER( RedStateAp *state );
+ virtual void STATE_GOTO_ERROR();
+
+ virtual void writeData();
+ virtual void writeExec();
+};
+
+#endif
diff --git a/ragel/mltable.cpp b/ragel/mltable.cpp
new file mode 100644
index 0000000..5c4ae2c
--- /dev/null
+++ b/ragel/mltable.cpp
@@ -0,0 +1,1131 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "ragel.h"
+#include "mltable.h"
+#include "redfsm.h"
+#include "gendata.h"
+
+/* Determine if we should use indicies or not. */
+void OCamlTabCodeGen::calcIndexSize()
+{
+ int sizeWithInds = 0, sizeWithoutInds = 0;
+
+ /* Calculate cost of using with indicies. */
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ int totalIndex = st->outSingle.length() + st->outRange.length() +
+ (st->defTrans == 0 ? 0 : 1);
+ sizeWithInds += arrayTypeSize(redFsm->maxIndex) * totalIndex;
+ }
+ sizeWithInds += arrayTypeSize(redFsm->maxState) * redFsm->transSet.length();
+ if ( redFsm->anyActions() )
+ sizeWithInds += arrayTypeSize(redFsm->maxActionLoc) * redFsm->transSet.length();
+
+ /* Calculate the cost of not using indicies. */
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ int totalIndex = st->outSingle.length() + st->outRange.length() +
+ (st->defTrans == 0 ? 0 : 1);
+ sizeWithoutInds += arrayTypeSize(redFsm->maxState) * totalIndex;
+ if ( redFsm->anyActions() )
+ sizeWithoutInds += arrayTypeSize(redFsm->maxActionLoc) * totalIndex;
+ }
+
+ /* If using indicies reduces the size, use them. */
+ useIndicies = sizeWithInds < sizeWithoutInds;
+}
+
+std::ostream &OCamlTabCodeGen::TO_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->toStateAction != 0 )
+ act = state->toStateAction->location+1;
+ out << act;
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::FROM_STATE_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->fromStateAction != 0 )
+ act = state->fromStateAction->location+1;
+ out << act;
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::EOF_ACTION( RedStateAp *state )
+{
+ int act = 0;
+ if ( state->eofAction != 0 )
+ act = state->eofAction->location+1;
+ out << act;
+ return out;
+}
+
+
+std::ostream &OCamlTabCodeGen::TRANS_ACTION( RedTransAp *trans )
+{
+ /* If there are actions, emit them. Otherwise emit zero. */
+ int act = 0;
+ if ( trans->action != 0 )
+ act = trans->action->location+1;
+ out << act;
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::TO_STATE_ACTION_SWITCH()
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numToStateRefs > 0 ) {
+ /* Write the case label, the action and the case break. */
+ out << "\t| " << act->actionId << " ->\n";
+ ACTION( out, act, 0, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::FROM_STATE_ACTION_SWITCH()
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numFromStateRefs > 0 ) {
+ /* Write the case label, the action and the case break. */
+ out << "\t| " << act->actionId << " ->\n";
+ ACTION( out, act, 0, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::EOF_ACTION_SWITCH()
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numEofRefs > 0 ) {
+ /* Write the case label, the action and the case break. */
+ out << "\t| " << act->actionId << " ->\n";
+ ACTION( out, act, 0, true );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+
+std::ostream &OCamlTabCodeGen::ACTION_SWITCH()
+{
+ /* Walk the list of functions, printing the cases. */
+ for ( GenActionList::Iter act = actionList; act.lte(); act++ ) {
+ /* Write out referenced actions. */
+ if ( act->numTransRefs > 0 ) {
+ /* Write the case label, the action and the case break. */
+ out << "\t| " << act->actionId << " -> \n";
+ ACTION( out, act, 0, false );
+ }
+ }
+
+ genLineDirective( out );
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::COND_OFFSETS()
+{
+ out << "\t";
+ int totalStateNum = 0, curKeyOffset = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write the key offset. */
+ out << curKeyOffset;
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+
+ /* Move the key offset ahead. */
+ curKeyOffset += st->stateCondList.length();
+ }
+ out << "\n";
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::KEY_OFFSETS()
+{
+ out << "\t";
+ int totalStateNum = 0, curKeyOffset = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write the key offset. */
+ out << curKeyOffset;
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+
+ /* Move the key offset ahead. */
+ curKeyOffset += st->outSingle.length() + st->outRange.length()*2;
+ }
+ out << "\n";
+ return out;
+}
+
+
+std::ostream &OCamlTabCodeGen::INDEX_OFFSETS()
+{
+ out << "\t";
+ int totalStateNum = 0, curIndOffset = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write the index offset. */
+ out << curIndOffset;
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+
+ /* Move the index offset ahead. */
+ curIndOffset += st->outSingle.length() + st->outRange.length();
+ if ( st->defTrans != 0 )
+ curIndOffset += 1;
+ }
+ out << "\n";
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::COND_LENS()
+{
+ out << "\t";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write singles length. */
+ out << st->stateCondList.length();
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ return out;
+}
+
+
+std::ostream &OCamlTabCodeGen::SINGLE_LENS()
+{
+ out << "\t";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write singles length. */
+ out << st->outSingle.length();
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::RANGE_LENS()
+{
+ out << "\t";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Emit length of range index. */
+ out << st->outRange.length();
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::TO_STATE_ACTIONS()
+{
+ out << "\t";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write any eof action. */
+ TO_STATE_ACTION(st);
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::FROM_STATE_ACTIONS()
+{
+ out << "\t";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write any eof action. */
+ FROM_STATE_ACTION(st);
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::EOF_ACTIONS()
+{
+ out << "\t";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write any eof action. */
+ EOF_ACTION(st);
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::EOF_TRANS()
+{
+ out << "\t";
+ int totalStateNum = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Write any eof action. */
+ long trans = 0;
+ if ( st->eofTrans != 0 ) {
+ assert( st->eofTrans->pos >= 0 );
+ trans = st->eofTrans->pos+1;
+ }
+ out << trans;
+
+ if ( !st.last() ) {
+ out << ARR_SEP();
+ if ( ++totalStateNum % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ return out;
+}
+
+
+std::ostream &OCamlTabCodeGen::COND_KEYS()
+{
+ out << '\t';
+ int totalTrans = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Loop the state's transitions. */
+ for ( GenStateCondList::Iter sc = st->stateCondList; sc.lte(); sc++ ) {
+ /* Lower key. */
+ out << ALPHA_KEY( sc->lowKey ) << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+
+ /* Upper key. */
+ out << ALPHA_KEY( sc->highKey ) << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+
+ /* Output one last number so we don't have to figure out when the last
+ * entry is and avoid writing a comma. */
+ out << 0 << "\n";
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::COND_SPACES()
+{
+ out << '\t';
+ int totalTrans = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Loop the state's transitions. */
+ for ( GenStateCondList::Iter sc = st->stateCondList; sc.lte(); sc++ ) {
+ /* Cond Space id. */
+ out << sc->condSpace->condSpaceId << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+
+ /* Output one last number so we don't have to figure out when the last
+ * entry is and avoid writing a comma. */
+ out << 0 << "\n";
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::KEYS()
+{
+ out << '\t';
+ int totalTrans = 0;
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Loop the singles. */
+ for ( RedTransList::Iter stel = st->outSingle; stel.lte(); stel++ ) {
+ out << ALPHA_KEY( stel->lowKey ) << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+
+ /* Loop the state's transitions. */
+ for ( RedTransList::Iter rtel = st->outRange; rtel.lte(); rtel++ ) {
+ /* Lower key. */
+ out << ALPHA_KEY( rtel->lowKey ) << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+
+ /* Upper key. */
+ out << ALPHA_KEY( rtel->highKey ) << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+
+ /* Output one last number so we don't have to figure out when the last
+ * entry is and avoid writing a comma. */
+ out << 0 << "\n";
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::INDICIES()
+{
+ int totalTrans = 0;
+ out << '\t';
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Walk the singles. */
+ for ( RedTransList::Iter stel = st->outSingle; stel.lte(); stel++ ) {
+ out << stel->value->id << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+
+ /* Walk the ranges. */
+ for ( RedTransList::Iter rtel = st->outRange; rtel.lte(); rtel++ ) {
+ out << rtel->value->id << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+
+ /* The state's default index goes next. */
+ if ( st->defTrans != 0 ) {
+ out << st->defTrans->id << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+
+ /* Output one last number so we don't have to figure out when the last
+ * entry is and avoid writing a comma. */
+ out << 0 << "\n";
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::TRANS_TARGS()
+{
+ int totalTrans = 0;
+ out << '\t';
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Walk the singles. */
+ for ( RedTransList::Iter stel = st->outSingle; stel.lte(); stel++ ) {
+ RedTransAp *trans = stel->value;
+ out << trans->targ->id << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+
+ /* Walk the ranges. */
+ for ( RedTransList::Iter rtel = st->outRange; rtel.lte(); rtel++ ) {
+ RedTransAp *trans = rtel->value;
+ out << trans->targ->id << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+
+ /* The state's default target state. */
+ if ( st->defTrans != 0 ) {
+ RedTransAp *trans = st->defTrans;
+ out << trans->targ->id << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ if ( st->eofTrans != 0 ) {
+ RedTransAp *trans = st->eofTrans;
+ trans->pos = totalTrans;
+ out << trans->targ->id << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+
+
+ /* Output one last number so we don't have to figure out when the last
+ * entry is and avoid writing a comma. */
+ out << 0 << "\n";
+ return out;
+}
+
+
+std::ostream &OCamlTabCodeGen::TRANS_ACTIONS()
+{
+ int totalTrans = 0;
+ out << '\t';
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ /* Walk the singles. */
+ for ( RedTransList::Iter stel = st->outSingle; stel.lte(); stel++ ) {
+ RedTransAp *trans = stel->value;
+ TRANS_ACTION( trans ) << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+
+ /* Walk the ranges. */
+ for ( RedTransList::Iter rtel = st->outRange; rtel.lte(); rtel++ ) {
+ RedTransAp *trans = rtel->value;
+ TRANS_ACTION( trans ) << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+
+ /* The state's default index goes next. */
+ if ( st->defTrans != 0 ) {
+ RedTransAp *trans = st->defTrans;
+ TRANS_ACTION( trans ) << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+
+ for ( RedStateList::Iter st = redFsm->stateList; st.lte(); st++ ) {
+ if ( st->eofTrans != 0 ) {
+ RedTransAp *trans = st->eofTrans;
+ TRANS_ACTION( trans ) << ARR_SEP();
+ if ( ++totalTrans % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+
+ /* Output one last number so we don't have to figure out when the last
+ * entry is and avoid writing a comma. */
+ out << 0 << "\n";
+ return out;
+}
+
+std::ostream &OCamlTabCodeGen::TRANS_TARGS_WI()
+{
+ /* Transitions must be written ordered by their id. */
+ RedTransAp **transPtrs = new RedTransAp*[redFsm->transSet.length()];
+ for ( TransApSet::Iter trans = redFsm->transSet; trans.lte(); trans++ )
+ transPtrs[trans->id] = trans;
+
+ /* Keep a count of the num of items in the array written. */
+ out << '\t';
+ int totalStates = 0;
+ for ( int t = 0; t < redFsm->transSet.length(); t++ ) {
+ /* Record the position, need this for eofTrans. */
+ RedTransAp *trans = transPtrs[t];
+ trans->pos = t;
+
+ /* Write out the target state. */
+ out << trans->targ->id;
+ if ( t < redFsm->transSet.length()-1 ) {
+ out << ARR_SEP();
+ if ( ++totalStates % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ delete[] transPtrs;
+ return out;
+}
+
+
+std::ostream &OCamlTabCodeGen::TRANS_ACTIONS_WI()
+{
+ /* Transitions must be written ordered by their id. */
+ RedTransAp **transPtrs = new RedTransAp*[redFsm->transSet.length()];
+ for ( TransApSet::Iter trans = redFsm->transSet; trans.lte(); trans++ )
+ transPtrs[trans->id] = trans;
+
+ /* Keep a count of the num of items in the array written. */
+ out << '\t';
+ int totalAct = 0;
+ for ( int t = 0; t < redFsm->transSet.length(); t++ ) {
+ /* Write the function for the transition. */
+ RedTransAp *trans = transPtrs[t];
+ TRANS_ACTION( trans );
+ if ( t < redFsm->transSet.length()-1 ) {
+ out << ARR_SEP();
+ if ( ++totalAct % IALL == 0 )
+ out << "\n\t";
+ }
+ }
+ out << "\n";
+ delete[] transPtrs;
+ return out;
+}
+
+void OCamlTabCodeGen::GOTO( ostream &ret, int gotoDest, bool inFinish )
+{
+ ret << "begin " << vCS() << " <- " << gotoDest << "; " <<
+ CTRL_FLOW() << "raise Goto_again end";
+}
+
+void OCamlTabCodeGen::GOTO_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish )
+{
+ ret << "begin " << vCS() << " <- (";
+ INLINE_LIST( ret, ilItem->children, 0, inFinish );
+ ret << "); " << CTRL_FLOW() << "raise Goto_again end";
+}
+
+void OCamlTabCodeGen::CURS( ostream &ret, bool inFinish )
+{
+ ret << "(_ps)";
+}
+
+void OCamlTabCodeGen::TARGS( ostream &ret, bool inFinish, int targState )
+{
+ ret << "(" << vCS() << ")";
+}
+
+void OCamlTabCodeGen::NEXT( ostream &ret, int nextDest, bool inFinish )
+{
+ ret << vCS() << " <- " << nextDest << ";";
+}
+
+void OCamlTabCodeGen::NEXT_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish )
+{
+ ret << vCS() << " <- (";
+ INLINE_LIST( ret, ilItem->children, 0, inFinish );
+ ret << ");";
+}
+
+void OCamlTabCodeGen::CALL( ostream &ret, int callDest, int targState, bool inFinish )
+{
+ if ( prePushExpr != 0 ) {
+ ret << "begin ";
+ INLINE_LIST( ret, prePushExpr, 0, false );
+ }
+
+ ret << "begin " << AT( STACK(), POST_INCR(TOP()) ) << " <- " << vCS() << "; ";
+ ret << vCS() << " <- " << callDest << "; " << CTRL_FLOW() << "raise Goto_again end ";
+
+ if ( prePushExpr != 0 )
+ ret << "end";
+}
+
+void OCamlTabCodeGen::CALL_EXPR( ostream &ret, GenInlineItem *ilItem, int targState, bool inFinish )
+{
+ if ( prePushExpr != 0 ) {
+ ret << "begin ";
+ INLINE_LIST( ret, prePushExpr, 0, false );
+ }
+
+ ret << "begin " << AT(STACK(), POST_INCR(TOP()) ) << " <- " << vCS() << "; " << vCS() << " <- (";
+ INLINE_LIST( ret, ilItem->children, targState, inFinish );
+ ret << "); " << CTRL_FLOW() << "raise Goto_again end ";
+
+ if ( prePushExpr != 0 )
+ ret << "end";
+}
+
+void OCamlTabCodeGen::RET( ostream &ret, bool inFinish )
+{
+ ret << "begin " << vCS() << " <- " << AT(STACK(), PRE_DECR(TOP()) ) << "; ";
+
+ if ( postPopExpr != 0 ) {
+ ret << "begin ";
+ INLINE_LIST( ret, postPopExpr, 0, false );
+ ret << "end ";
+ }
+
+ ret << CTRL_FLOW() << "raise Goto_again end";
+}
+
+void OCamlTabCodeGen::BREAK( ostream &ret, int targState )
+{
+ outLabelUsed = true;
+ ret << "begin " << P() << " <- " << P() << " + 1; " << CTRL_FLOW() << "raise Goto_out end";
+}
+
+void OCamlTabCodeGen::writeData()
+{
+ /* If there are any transtion functions then output the array. If there
+ * are none, don't bother emitting an empty array that won't be used. */
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActArrItem), A() );
+ ACTIONS_ARRAY();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyConditions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondOffset), CO() );
+ COND_OFFSETS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondLen), CL() );
+ COND_LENS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( WIDE_ALPH_TYPE(), CK() );
+ COND_KEYS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxCondSpaceId), C() );
+ COND_SPACES();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxKeyOffset), KO() );
+ KEY_OFFSETS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( WIDE_ALPH_TYPE(), K() );
+ KEYS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxSingleLen), SL() );
+ SINGLE_LENS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxRangeLen), RL() );
+ RANGE_LENS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndexOffset), IO() );
+ INDEX_OFFSETS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ if ( useIndicies ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndex), I() );
+ INDICIES();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxState), TT() );
+ TRANS_TARGS_WI();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), TA() );
+ TRANS_ACTIONS_WI();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+ }
+ else {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxState), TT() );
+ TRANS_TARGS();
+ CLOSE_ARRAY() <<
+ "\n";
+
+ if ( redFsm->anyActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), TA() );
+ TRANS_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+ }
+
+ if ( redFsm->anyToStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), TSA() );
+ TO_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyFromStateActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), FSA() );
+ FROM_STATE_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxActionLoc), EA() );
+ EOF_ACTIONS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ if ( redFsm->anyEofTrans() ) {
+ OPEN_ARRAY( ARRAY_TYPE(redFsm->maxIndexOffset+1), ET() );
+ EOF_TRANS();
+ CLOSE_ARRAY() <<
+ "\n";
+ }
+
+ STATE_IDS();
+
+ out << "type state = { mutable keys : int; mutable trans : int; mutable acts : int; mutable nacts : int; }"
+ << TOP_SEP();
+
+ out << "exception Goto_match" << TOP_SEP();
+ out << "exception Goto_again" << TOP_SEP();
+ out << "exception Goto_eof_trans" << TOP_SEP();
+}
+
+void OCamlTabCodeGen::LOCATE_TRANS()
+{
+ out <<
+ " state.keys <- " << AT( KO(), vCS() ) << ";\n"
+ " state.trans <- " << CAST(transType) << AT( IO(), vCS() ) << ";\n"
+ "\n"
+ " let klen = " << AT( SL(), vCS() ) << " in\n"
+ " if klen > 0 then begin\n"
+ " let lower : " << signedKeysType << " ref = ref state.keys in\n"
+ " let upper : " << signedKeysType << " ref = ref " << CAST(signedKeysType) <<
+ "(state.keys + klen - 1) in\n"
+ " while !upper >= !lower do\n"
+ " let mid = " << CAST(signedKeysType) << " (!lower + ((!upper - !lower) / 2)) in\n"
+ " if " << GET_WIDE_KEY() << " < " << AT( K(), "mid" ) << " then\n"
+ " upper := " << CAST(signedKeysType) << " (mid - 1)\n"
+ " else if " << GET_WIDE_KEY() << " > " << AT( K(), "mid" ) << " then\n"
+ " lower := " << CAST(signedKeysType) << " (mid + 1)\n"
+ " else begin\n"
+ " state.trans <- state.trans + " << CAST(transType) << " (mid - state.keys);\n"
+ " raise Goto_match;\n"
+ " end\n"
+ " done;\n"
+ " state.keys <- state.keys + " << CAST(keysType) << " klen;\n"
+ " state.trans <- state.trans + " << CAST(transType) << " klen;\n"
+ " end;\n"
+ "\n"
+ " let klen = " << AT( RL(), vCS() ) << " in\n"
+ " if klen > 0 then begin\n"
+ " let lower : " << signedKeysType << " ref = ref state.keys in\n"
+ " let upper : " << signedKeysType << " ref = ref " << CAST(signedKeysType) <<
+ "(state.keys + (klen * 2) - 2) in\n"
+ " while !upper >= !lower do\n"
+ " let mid = " << CAST(signedKeysType) << " (!lower + (((!upper - !lower) / 2) land (lnot 1))) in\n"
+ " if " << GET_WIDE_KEY() << " < " << AT( K() , "mid" ) << " then\n"
+ " upper := " << CAST(signedKeysType) << " (mid - 2)\n"
+ " else if " << GET_WIDE_KEY() << " > " << AT( K(), "mid+1" ) << " then\n"
+ " lower := " << CAST(signedKeysType) << " (mid + 2)\n"
+ " else begin\n"
+ " state.trans <- state.trans + " << CAST(transType) << "((mid - state.keys) / 2);\n"
+ " raise Goto_match;\n"
+ " end\n"
+ " done;\n"
+ " state.trans <- state.trans + " << CAST(transType) << " klen;\n"
+ " end;\n"
+ "\n";
+}
+
+void OCamlTabCodeGen::COND_TRANSLATE()
+{
+ out <<
+ " _widec = " << GET_KEY() << ";\n"
+ " _klen = " << CL() << "[" << vCS() << "];\n"
+ " _keys = " << CAST(keysType) << " ("<< CO() << "[" << vCS() << "]*2);\n"
+ " if ( _klen > 0 ) {\n"
+ " " << signedKeysType << " _lower = _keys;\n"
+ " " << signedKeysType << " _mid;\n"
+ " " << signedKeysType << " _upper = " << CAST(signedKeysType) <<
+ " (_keys + (_klen<<1) - 2);\n"
+ " while (true) {\n"
+ " if ( _upper < _lower )\n"
+ " break;\n"
+ "\n"
+ " _mid = " << CAST(signedKeysType) <<
+ " (_lower + (((_upper-_lower) >> 1) & ~1));\n"
+ " if ( " << GET_WIDE_KEY() << " < " << CK() << "[_mid] )\n"
+ " _upper = " << CAST(signedKeysType) << " (_mid - 2);\n"
+ " else if ( " << GET_WIDE_KEY() << " > " << CK() << "[_mid+1] )\n"
+ " _lower = " << CAST(signedKeysType) << " (_mid + 2);\n"
+ " else {\n"
+ " switch ( " << C() << "[" << CO() << "[" << vCS() << "]"
+ " + ((_mid - _keys)>>1)] ) {\n";
+
+ for ( CondSpaceList::Iter csi = condSpaceList; csi.lte(); csi++ ) {
+ GenCondSpace *condSpace = csi;
+ out << " case " << condSpace->condSpaceId << ": {\n";
+ out << TABS(2) << "_widec = " << CAST(WIDE_ALPH_TYPE()) << "(" <<
+ KEY(condSpace->baseKey) << " + (" << GET_KEY() <<
+ " - " << KEY(keyOps->minKey) << "));\n";
+
+ for ( GenCondSet::Iter csi = condSpace->condSet; csi.lte(); csi++ ) {
+ out << TABS(2) << "if ( ";
+ CONDITION( out, *csi );
+ Size condValOffset = ((1 << csi.pos()) * keyOps->alphSize());
+ out << " ) _widec += " << condValOffset << ";\n";
+ }
+
+ out <<
+ " break;\n"
+ " }\n";
+ }
+
+ SWITCH_DEFAULT();
+
+ out <<
+ " }\n"
+ " break;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ "\n";
+}
+
+void OCamlTabCodeGen::writeExec()
+{
+ testEofUsed = false;
+ outLabelUsed = false;
+ initVarTypes();
+
+ out <<
+ " begin\n";
+// " " << klenType << " _klen";
+
+// if ( redFsm->anyRegCurStateRef() )
+// out << ", _ps";
+
+/*
+ out << " " << transType << " _trans;\n";
+
+ if ( redFsm->anyConditions() )
+ out << " " << WIDE_ALPH_TYPE() << " _widec;\n";
+
+ if ( redFsm->anyToStateActions() || redFsm->anyRegActions()
+ || redFsm->anyFromStateActions() )
+ {
+ out <<
+ " int _acts;\n"
+ " int _nacts;\n";
+ }
+
+ out <<
+ " " << keysType << " _keys;\n"
+ "\n";
+// " " << PTR_CONST() << WIDE_ALPH_TYPE() << POINTER() << "_keys;\n"
+*/
+
+ out <<
+ " let state = { keys = 0; trans = 0; acts = 0; nacts = 0; } in\n"
+ " let rec do_start () =\n";
+ if ( !noEnd ) {
+ testEofUsed = true;
+ out <<
+ " if " << P() << " = " << PE() << " then\n"
+ " do_test_eof ()\n"
+ "\telse\n";
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " if " << vCS() << " = " << redFsm->errState->id << " then\n"
+ " do_out ()\n"
+ "\telse\n";
+ }
+ out << "\tdo_resume ()\n";
+
+ out << "and do_resume () =\n";
+
+ if ( redFsm->anyFromStateActions() ) {
+ out <<
+ " state.acts <- " << AT( FSA(), vCS() ) << ";\n"
+ " state.nacts <- " << AT( A(), POST_INCR("state.acts") ) << ";\n"
+ " while " << POST_DECR("state.nacts") << " > 0 do\n"
+ " begin match " << AT( A(), POST_INCR("state.acts") ) << " with\n";
+ FROM_STATE_ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " end\n"
+ " done;\n"
+ "\n";
+ }
+
+ if ( redFsm->anyConditions() )
+ COND_TRANSLATE();
+
+ out << "\tbegin try\n";
+ LOCATE_TRANS();
+ out << "\twith Goto_match -> () end;\n";
+
+ out <<
+ "\tdo_match ()\n";
+
+ out << "and do_match () =\n";
+
+ if ( useIndicies )
+ out << " state.trans <- " << CAST(transType) << AT( I(), "state.trans" ) << ";\n";
+
+ out << "\tdo_eof_trans ()\n";
+
+// if ( redFsm->anyEofTrans() )
+ out << "and do_eof_trans () =\n";
+
+ if ( redFsm->anyRegCurStateRef() )
+ out << " let ps = " << vCS() << " in\n";
+
+ out <<
+ " " << vCS() << " <- " << AT( TT() ,"state.trans" ) << ";\n"
+ "\n";
+
+ if ( redFsm->anyRegActions() ) {
+ out <<
+ "\tbegin try\n"
+ " match " << AT( TA(), "state.trans" ) << " with\n"
+ "\t| 0 -> raise Goto_again\n"
+ "\t| _ ->\n"
+ " state.acts <- " << AT( TA(), "state.trans" ) << ";\n"
+ " state.nacts <- " << AT( A(), POST_INCR("state.acts") ) << ";\n"
+ " while " << POST_DECR("state.nacts") << " > 0 do\n"
+ " begin match " << AT( A(), POST_INCR("state.acts") ) << " with\n";
+ ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " end;\n"
+ " done\n"
+ "\twith Goto_again -> () end;\n";
+ }
+ out << "\tdo_again ()\n";
+
+// if ( redFsm->anyRegActions() || redFsm->anyActionGotos() ||
+// redFsm->anyActionCalls() || redFsm->anyActionRets() )
+ out << "\tand do_again () =\n";
+
+ if ( redFsm->anyToStateActions() ) {
+ out <<
+ " state.acts <- " << AT( TSA(), vCS() ) << ";\n"
+ " state.nacts <- " << AT( A(), POST_INCR("state.acts") ) << ";\n"
+ " while " << POST_DECR("state.nacts") << " > 0 do\n"
+ " begin match " << AT( A(), POST_INCR("state.acts") ) << " with\n";
+ TO_STATE_ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " end\n"
+ " done;\n"
+ "\n";
+ }
+
+ if ( redFsm->errState != 0 ) {
+ outLabelUsed = true;
+ out <<
+ " match " << vCS() << " with\n"
+ "\t| " << redFsm->errState->id << " -> do_out ()\n"
+ "\t| _ ->\n";
+ }
+
+ out << "\t" << P() << " <- " << P() << " + 1;\n";
+
+ if ( !noEnd ) {
+ out <<
+ " if " << P() << " <> " << PE() << " then\n"
+ " do_resume ()\n"
+ "\telse do_test_eof ()\n";
+ }
+ else {
+ out <<
+ " do_resume ()\n";
+ }
+
+// if ( testEofUsed )
+ out << "and do_test_eof () =\n";
+
+ if ( redFsm->anyEofTrans() || redFsm->anyEofActions() ) {
+ out <<
+ " if " << P() << " = " << vEOF() << " then\n"
+ " begin try\n";
+
+ if ( redFsm->anyEofTrans() ) {
+ out <<
+ " if " << AT( ET(), vCS() ) << " > 0 then\n"
+ " begin\n"
+ " state.trans <- " << CAST(transType) << "(" << AT( ET(), vCS() ) << " - 1);\n"
+ " raise Goto_eof_trans;\n"
+ " end\n";
+ }
+
+ if ( redFsm->anyEofActions() ) {
+ out <<
+ " let __acts = ref " << AT( EA(), vCS() ) << " in\n"
+ " let __nacts = ref " << AT( A(), "!__acts" ) << " in\n"
+ " incr __acts;\n"
+ " while !__nacts > 0 do\n"
+ " decr __nacts;\n"
+ " begin match " << AT( A(), POST_INCR("__acts.contents") ) << " with\n";
+ EOF_ACTION_SWITCH();
+ SWITCH_DEFAULT() <<
+ " end;\n"
+ " done\n";
+ }
+
+ out <<
+ " with Goto_again -> do_again ()\n"
+ " | Goto_eof_trans -> do_eof_trans () end\n"
+ "\n";
+ }
+ else
+ {
+ out << "\t()\n";
+ }
+
+ if ( outLabelUsed )
+ out << " and do_out () = ()\n";
+
+ out << "\tin do_start ()\n";
+ out << " end;\n";
+}
+
+void OCamlTabCodeGen::initVarTypes()
+{
+ int klenMax = MAX(MAX(redFsm->maxCondLen, redFsm->maxRangeLen),
+ redFsm->maxSingleLen);
+ int keysMax = MAX(MAX(redFsm->maxKeyOffset, klenMax),
+ redFsm->maxCondOffset);
+ int transMax = MAX(MAX(redFsm->maxIndex+1, redFsm->maxIndexOffset), keysMax);
+ transMax = MAX(transMax, klenMax);
+ transType = ARRAY_TYPE(transMax);
+ klenType = ARRAY_TYPE(klenMax);
+ keysType = ARRAY_TYPE(keysMax);
+ signedKeysType = ARRAY_TYPE(keysMax, true);
+}
diff --git a/ragel/mltable.h b/ragel/mltable.h
new file mode 100644
index 0000000..505d378
--- /dev/null
+++ b/ragel/mltable.h
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2001-2006 Adrian Thurston <thurston@complang.org>
+ * 2004 Erich Ocean <eric.ocean@ampede.com>
+ * 2005 Alan West <alan@alanz.com>
+ */
+
+/* This file is part of Ragel.
+ *
+ * Ragel is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Ragel 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 Ragel; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _OCAMLTABCODEGEN_H
+#define _OCAMLTABCODEGEN_H
+
+#include <iostream>
+#include "mlcodegen.h"
+
+/* Forwards. */
+/*
+struct CodeGenData;
+struct NameInst;
+struct RedTransAp;
+struct RedStateAp;
+*/
+
+/*
+ * OCamlTabCodeGen
+ */
+class OCamlTabCodeGen : public OCamlCodeGen
+{
+public:
+ OCamlTabCodeGen( ostream &out ) : OCamlCodeGen(out) {}
+ virtual ~OCamlTabCodeGen() { }
+ virtual void writeData();
+ virtual void writeExec();
+
+protected:
+ std::ostream &TO_STATE_ACTION_SWITCH();
+ std::ostream &FROM_STATE_ACTION_SWITCH();
+ std::ostream &EOF_ACTION_SWITCH();
+ std::ostream &ACTION_SWITCH();
+
+ std::ostream &COND_KEYS();
+ std::ostream &COND_SPACES();
+ std::ostream &KEYS();
+ std::ostream &INDICIES();
+ std::ostream &COND_OFFSETS();
+ std::ostream &KEY_OFFSETS();
+ std::ostream &INDEX_OFFSETS();
+ std::ostream &COND_LENS();
+ std::ostream &SINGLE_LENS();
+ std::ostream &RANGE_LENS();
+ std::ostream &TO_STATE_ACTIONS();
+ std::ostream &FROM_STATE_ACTIONS();
+ std::ostream &EOF_ACTIONS();
+ std::ostream &EOF_TRANS();
+ std::ostream &TRANS_TARGS();
+ std::ostream &TRANS_ACTIONS();
+ std::ostream &TRANS_TARGS_WI();
+ std::ostream &TRANS_ACTIONS_WI();
+
+ void LOCATE_TRANS();
+
+ void COND_TRANSLATE();
+
+ void GOTO( ostream &ret, int gotoDest, bool inFinish );
+ void CALL( ostream &ret, int callDest, int targState, bool inFinish );
+ void NEXT( ostream &ret, int nextDest, bool inFinish );
+ void GOTO_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish );
+ void NEXT_EXPR( ostream &ret, GenInlineItem *ilItem, bool inFinish );
+ void CALL_EXPR( ostream &ret, GenInlineItem *ilItem, int targState, bool inFinish );
+ void CURS( ostream &ret, bool inFinish );
+ void TARGS( ostream &ret, bool inFinish, int targState );
+ void RET( ostream &ret, bool inFinish );
+ void BREAK( ostream &ret, int targState );
+
+ virtual std::ostream &TO_STATE_ACTION( RedStateAp *state );
+ virtual std::ostream &FROM_STATE_ACTION( RedStateAp *state );
+ virtual std::ostream &EOF_ACTION( RedStateAp *state );
+ virtual std::ostream &TRANS_ACTION( RedTransAp *trans );
+ virtual void calcIndexSize();
+
+ void initVarTypes();
+ string klenType;
+ string keysType;
+ string signedKeysType;
+ string transType;
+};
+
+#endif
diff --git a/ragel/rlparse.cpp b/ragel/rlparse.cpp
index ec83836..35b3fff 100644
--- a/ragel/rlparse.cpp
+++ b/ragel/rlparse.cpp
@@ -4016,43 +4016,50 @@ commit_upwards:
}
switch ( lel->reduction ) {
case 17: {
+Token *__ref0 = (Token*)&rhs[1]->user.token;
+Token *__ref1 = (Token*)&rhs[1]->user.token;
+Token *__ref2 = (Token*)&rhs[1]->user.token;
#line 61 "rlparse.kl"
- LengthDef *lengthDef = new LengthDef( (&rhs[1]->user.token)->data );
+ LengthDef *lengthDef = new LengthDef( (__ref0)->data );
pd->lengthDefList.append( lengthDef );
/* Generic creation of machine for instantiation and assignment. */
MachineDef *machineDef = new MachineDef( lengthDef );
- tryMachineDef( (&rhs[1]->user.token)->loc, (&rhs[1]->user.token)->data, machineDef, false );
+ tryMachineDef( (__ref1)->loc, (__ref2)->data, machineDef, false );
-#line 4028 "rlparse.cpp"
+#line 4031 "rlparse.cpp"
} break;
case 18: {
+Token *__ref0 = (Token*)&rhs[1]->user.token;
+Parser_Lel_inline_list *__ref1 = (Parser_Lel_inline_list*)&rhs[2]->user.inline_list;
#line 72 "rlparse.kl"
if ( pd->prePushExpr != 0 ) {
/* Recover by just ignoring the duplicate. */
- error((&rhs[1]->user.token)->loc) << "pre_push code already defined" << endl;
+ error((__ref0)->loc) << "pre_push code already defined" << endl;
}
- pd->prePushExpr = (&rhs[2]->user.inline_list)->inlineList;
+ pd->prePushExpr = (__ref1)->inlineList;
-#line 4041 "rlparse.cpp"
+#line 4046 "rlparse.cpp"
} break;
case 19: {
+Token *__ref0 = (Token*)&rhs[1]->user.token;
+Parser_Lel_inline_list *__ref1 = (Parser_Lel_inline_list*)&rhs[2]->user.inline_list;
#line 84 "rlparse.kl"
if ( pd->postPopExpr != 0 ) {
/* Recover by just ignoring the duplicate. */
- error((&rhs[1]->user.token)->loc) << "post_pop code already defined" << endl;
+ error((__ref0)->loc) << "post_pop code already defined" << endl;
}
- pd->postPopExpr = (&rhs[2]->user.inline_list)->inlineList;
+ pd->postPopExpr = (__ref1)->inlineList;
-#line 4054 "rlparse.cpp"
+#line 4061 "rlparse.cpp"
} break;
case 20: {
#line 95 "rlparse.kl"
@@ -4060,19 +4067,21 @@ case 20: {
exportContext.append( true );
-#line 4062 "rlparse.cpp"
+#line 4069 "rlparse.cpp"
} break;
case 21: {
+Parser_Lel_opt_export *__ref0 = (Parser_Lel_opt_export*)&redLel->user.opt_export;
#line 104 "rlparse.kl"
- (&redLel->user.opt_export)->isSet = true;
+ (__ref0)->isSet = true;
-#line 4068 "rlparse.cpp"
+#line 4076 "rlparse.cpp"
} break;
case 22: {
+Parser_Lel_opt_export *__ref0 = (Parser_Lel_opt_export*)&redLel->user.opt_export;
#line 105 "rlparse.kl"
- (&redLel->user.opt_export)->isSet = false;
+ (__ref0)->isSet = false;
-#line 4074 "rlparse.cpp"
+#line 4083 "rlparse.cpp"
} break;
case 23: {
#line 108 "rlparse.kl"
@@ -4080,80 +4089,105 @@ case 23: {
exportContext.remove( exportContext.length()-1 );
-#line 4082 "rlparse.cpp"
+#line 4091 "rlparse.cpp"
} break;
case 24: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&rhs[1]->user.token_type;
+Parser_Lel_token_type *__ref1 = (Parser_Lel_token_type*)&rhs[1]->user.token_type;
+Parser_Lel_join *__ref2 = (Parser_Lel_join*)&rhs[3]->user.join;
+Parser_Lel_token_type *__ref3 = (Parser_Lel_token_type*)&rhs[1]->user.token_type;
+Parser_Lel_token_type *__ref4 = (Parser_Lel_token_type*)&rhs[1]->user.token_type;
+Parser_Lel_opt_export *__ref5 = (Parser_Lel_opt_export*)&rhs[0]->user.opt_export;
+Parser_Lel_join *__ref6 = (Parser_Lel_join*)&rhs[3]->user.join;
+Token *__ref7 = (Token*)&rhs[2]->user.token;
#line 113 "rlparse.kl"
/* Main machine must be an instance. */
bool isInstance = false;
- if ( strcmp((&rhs[1]->user.token_type)->token.data, mainMachine) == 0 ) {
- warning((&rhs[1]->user.token_type)->token.loc) <<
+ if ( strcmp((__ref0)->token.data, mainMachine) == 0 ) {
+ warning((__ref1)->token.loc) <<
"main machine will be implicitly instantiated" << endl;
isInstance = true;
}
/* Generic creation of machine for instantiation and assignment. */
- MachineDef *machineDef = new MachineDef( (&rhs[3]->user.join)->join );
- tryMachineDef( (&rhs[1]->user.token_type)->token.loc, (&rhs[1]->user.token_type)->token.data, machineDef, isInstance );
+ MachineDef *machineDef = new MachineDef( (__ref2)->join );
+ tryMachineDef( (__ref3)->token.loc, (__ref4)->token.data, machineDef, isInstance );
- if ( (&rhs[0]->user.opt_export)->isSet )
+ if ( (__ref5)->isSet )
exportContext.remove( exportContext.length()-1 );
- (&rhs[3]->user.join)->join->loc = (&rhs[2]->user.token)->loc;
+ (__ref6)->join->loc = (__ref7)->loc;
-#line 4105 "rlparse.cpp"
+#line 4122 "rlparse.cpp"
} break;
case 25: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&rhs[1]->user.token_type;
+Parser_Lel_token_type *__ref1 = (Parser_Lel_token_type*)&rhs[1]->user.token_type;
+Parser_Lel_join_or_lm *__ref2 = (Parser_Lel_join_or_lm*)&rhs[3]->user.join_or_lm;
+Parser_Lel_opt_export *__ref3 = (Parser_Lel_opt_export*)&rhs[0]->user.opt_export;
+Parser_Lel_join_or_lm *__ref4 = (Parser_Lel_join_or_lm*)&rhs[3]->user.join_or_lm;
+Parser_Lel_join_or_lm *__ref5 = (Parser_Lel_join_or_lm*)&rhs[3]->user.join_or_lm;
+Token *__ref6 = (Token*)&rhs[2]->user.token;
#line 133 "rlparse.kl"
/* Generic creation of machine for instantiation and assignment. */
- tryMachineDef( (&rhs[1]->user.token_type)->token.loc, (&rhs[1]->user.token_type)->token.data, (&rhs[3]->user.join_or_lm)->machineDef, true );
+ tryMachineDef( (__ref0)->token.loc, (__ref1)->token.data, (__ref2)->machineDef, true );
- if ( (&rhs[0]->user.opt_export)->isSet )
+ if ( (__ref3)->isSet )
exportContext.remove( exportContext.length()-1 );
/* Pass a location to join_or_lm */
- if ( (&rhs[3]->user.join_or_lm)->machineDef->join != 0 )
- (&rhs[3]->user.join_or_lm)->machineDef->join->loc = (&rhs[2]->user.token)->loc;
+ if ( (__ref4)->machineDef->join != 0 )
+ (__ref5)->machineDef->join->loc = (__ref6)->loc;
-#line 4121 "rlparse.cpp"
+#line 4145 "rlparse.cpp"
} break;
case 26: {
+Token *__ref0 = (Token*)&rhs[0]->user.token;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_token_type *__ref2 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref3 = (Token*)&rhs[0]->user.token;
#line 153 "rlparse.kl"
/* Make/get the priority key. The name may have already been referenced
* and therefore exist. */
PriorDictEl *priorDictEl;
- if ( pd->priorDict.insert( (&rhs[0]->user.token)->data, pd->nextPriorKey, &priorDictEl ) )
+ if ( pd->priorDict.insert( (__ref0)->data, pd->nextPriorKey, &priorDictEl ) )
pd->nextPriorKey += 1;
pd->curDefPriorKey = priorDictEl->value;
/* Make/get the local error key. */
LocalErrDictEl *localErrDictEl;
- if ( pd->localErrDict.insert( (&rhs[0]->user.token)->data, pd->nextLocalErrKey, &localErrDictEl ) )
+ if ( pd->localErrDict.insert( (__ref1)->data, pd->nextLocalErrKey, &localErrDictEl ) )
pd->nextLocalErrKey += 1;
pd->curDefLocalErrKey = localErrDictEl->value;
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref2)->token = *(__ref3);
-#line 4142 "rlparse.cpp"
+#line 4170 "rlparse.cpp"
} break;
case 27: {
+Token *__ref0 = (Token*)&rhs[1]->user.token;
+Token *__ref1 = (Token*)&rhs[1]->user.token;
+Token *__ref2 = (Token*)&rhs[1]->user.token;
+Token *__ref3 = (Token*)&rhs[2]->user.token;
+Token *__ref4 = (Token*)&rhs[1]->user.token;
+Parser_Lel_inline_list *__ref5 = (Parser_Lel_inline_list*)&rhs[3]->user.inline_list;
#line 171 "rlparse.kl"
- if ( pd->actionDict.find( (&rhs[1]->user.token)->data ) ) {
+ if ( pd->actionDict.find( (__ref0)->data ) ) {
/* Recover by just ignoring the duplicate. */
- error((&rhs[1]->user.token)->loc) << "action \"" << (&rhs[1]->user.token)->data << "\" already defined" << endl;
+ error((__ref1)->loc) << "action \"" << (__ref2)->data << "\" already defined" << endl;
}
else {
//cerr << "NEW ACTION " << $2->data << " " << $4->inlineList << endl;
/* Add the action to the list of actions. */
- Action *newAction = new Action( (&rhs[2]->user.token)->loc, (&rhs[1]->user.token)->data,
- (&rhs[3]->user.inline_list)->inlineList, pd->nextCondId++ );
+ Action *newAction = new Action( (__ref3)->loc, (__ref4)->data,
+ (__ref5)->inlineList, pd->nextCondId++ );
/* Insert to list and dict. */
pd->actionList.append( newAction );
@@ -4161,1675 +4195,2314 @@ case 27: {
}
-#line 4163 "rlparse.cpp"
+#line 4197 "rlparse.cpp"
} break;
case 28: {
+Token *__ref0 = (Token*)&rhs[0]->user.token;
+Token *__ref1 = (Token*)&rhs[1]->user.token;
+Token *__ref2 = (Token*)&rhs[2]->user.token;
+Token *__ref3 = (Token*)&rhs[1]->user.token;
+Token *__ref4 = (Token*)&rhs[1]->user.token;
+Token *__ref5 = (Token*)&rhs[2]->user.token;
#line 191 "rlparse.kl"
- if ( ! pd->setAlphType( (&rhs[0]->user.token)->loc, (&rhs[1]->user.token)->data, (&rhs[2]->user.token)->data ) ) {
+ if ( ! pd->setAlphType( (__ref0)->loc, (__ref1)->data, (__ref2)->data ) ) {
// Recover by ignoring the alphtype statement.
- error((&rhs[1]->user.token)->loc) << "\"" << (&rhs[1]->user.token)->data <<
- " " << (&rhs[2]->user.token)->data << "\" is not a valid alphabet type" << endl;
+ error((__ref3)->loc) << "\"" << (__ref4)->data <<
+ " " << (__ref5)->data << "\" is not a valid alphabet type" << endl;
}
-#line 4175 "rlparse.cpp"
+#line 4215 "rlparse.cpp"
} break;
case 29: {
+Token *__ref0 = (Token*)&rhs[0]->user.token;
+Token *__ref1 = (Token*)&rhs[1]->user.token;
+Token *__ref2 = (Token*)&rhs[1]->user.token;
+Token *__ref3 = (Token*)&rhs[1]->user.token;
#line 200 "rlparse.kl"
- if ( ! pd->setAlphType( (&rhs[0]->user.token)->loc, (&rhs[1]->user.token)->data ) ) {
+ if ( ! pd->setAlphType( (__ref0)->loc, (__ref1)->data ) ) {
// Recover by ignoring the alphtype statement.
- error((&rhs[1]->user.token)->loc) << "\"" << (&rhs[1]->user.token)->data <<
+ error((__ref2)->loc) << "\"" << (__ref3)->data <<
"\" is not a valid alphabet type" << endl;
}
-#line 4187 "rlparse.cpp"
+#line 4231 "rlparse.cpp"
} break;
case 30: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&rhs[1]->user.token_type;
+Parser_Lel_token_type *__ref1 = (Parser_Lel_token_type*)&rhs[2]->user.token_type;
+Parser_Lel_token_type *__ref2 = (Parser_Lel_token_type*)&rhs[1]->user.token_type;
+Parser_Lel_token_type *__ref3 = (Parser_Lel_token_type*)&rhs[2]->user.token_type;
#line 210 "rlparse.kl"
// Save the upper and lower ends of the range and emit the line number.
- pd->lowerNum = (&rhs[1]->user.token_type)->token.data;
- pd->upperNum = (&rhs[2]->user.token_type)->token.data;
- pd->rangeLowLoc = (&rhs[1]->user.token_type)->token.loc;
- pd->rangeHighLoc = (&rhs[2]->user.token_type)->token.loc;
+ pd->lowerNum = (__ref0)->token.data;
+ pd->upperNum = (__ref1)->token.data;
+ pd->rangeLowLoc = (__ref2)->token.loc;
+ pd->rangeHighLoc = (__ref3)->token.loc;
-#line 4199 "rlparse.cpp"
+#line 4247 "rlparse.cpp"
} break;
case 31: {
+Parser_Lel_inline_list *__ref0 = (Parser_Lel_inline_list*)&rhs[1]->user.inline_list;
#line 219 "rlparse.kl"
- pd->getKeyExpr = (&rhs[1]->user.inline_list)->inlineList;
+ pd->getKeyExpr = (__ref0)->inlineList;
-#line 4207 "rlparse.cpp"
+#line 4256 "rlparse.cpp"
} break;
case 32: {
+Parser_Lel_inline_list *__ref0 = (Parser_Lel_inline_list*)&rhs[1]->user.inline_list;
#line 224 "rlparse.kl"
- pd->accessExpr = (&rhs[1]->user.inline_list)->inlineList;
+ pd->accessExpr = (__ref0)->inlineList;
-#line 4215 "rlparse.cpp"
+#line 4265 "rlparse.cpp"
} break;
case 33: {
+Token *__ref0 = (Token*)&rhs[2]->user.token;
+Parser_Lel_inline_list *__ref1 = (Parser_Lel_inline_list*)&rhs[3]->user.inline_list;
+Token *__ref2 = (Token*)&rhs[2]->user.token;
#line 229 "rlparse.kl"
/* FIXME: Need to implement the rest of this. */
- bool wasSet = pd->setVariable( (&rhs[2]->user.token)->data, (&rhs[3]->user.inline_list)->inlineList );
+ bool wasSet = pd->setVariable( (__ref0)->data, (__ref1)->inlineList );
if ( !wasSet )
- error((&rhs[2]->user.token)->loc) << "bad variable name" << endl;
+ error((__ref2)->loc) << "bad variable name" << endl;
-#line 4226 "rlparse.cpp"
+#line 4279 "rlparse.cpp"
} break;
case 36: {
+Parser_Lel_join_or_lm *__ref0 = (Parser_Lel_join_or_lm*)&redLel->user.join_or_lm;
+Parser_Lel_join *__ref1 = (Parser_Lel_join*)&rhs[0]->user.join;
#line 249 "rlparse.kl"
- (&redLel->user.join_or_lm)->machineDef = new MachineDef( (&rhs[0]->user.join)->join );
+ (__ref0)->machineDef = new MachineDef( (__ref1)->join );
-#line 4234 "rlparse.cpp"
+#line 4289 "rlparse.cpp"
} break;
case 37: {
+Token *__ref0 = (Token*)&rhs[0]->user.token;
+Parser_Lel_lm_part_list *__ref1 = (Parser_Lel_lm_part_list*)&rhs[1]->user.lm_part_list;
+Parser_Lel_lm_part_list *__ref2 = (Parser_Lel_lm_part_list*)&rhs[1]->user.lm_part_list;
+Parser_Lel_join_or_lm *__ref3 = (Parser_Lel_join_or_lm*)&redLel->user.join_or_lm;
#line 253 "rlparse.kl"
/* Create a new factor going to a longest match structure. Record
* in the parse data that we have a longest match. */
- LongestMatch *lm = new LongestMatch( (&rhs[0]->user.token)->loc, (&rhs[1]->user.lm_part_list)->lmPartList );
+ LongestMatch *lm = new LongestMatch( (__ref0)->loc, (__ref1)->lmPartList );
pd->lmList.append( lm );
- for ( LmPartList::Iter lmp = *((&rhs[1]->user.lm_part_list)->lmPartList); lmp.lte(); lmp++ )
+ for ( LmPartList::Iter lmp = *((__ref2)->lmPartList); lmp.lte(); lmp++ )
lmp->longestMatch = lm;
- (&redLel->user.join_or_lm)->machineDef = new MachineDef( lm );
+ (__ref3)->machineDef = new MachineDef( lm );
-#line 4248 "rlparse.cpp"
+#line 4307 "rlparse.cpp"
} break;
case 38: {
+Parser_Lel_longest_match_part *__ref0 = (Parser_Lel_longest_match_part*)&rhs[1]->user.longest_match_part;
+Parser_Lel_lm_part_list *__ref1 = (Parser_Lel_lm_part_list*)&rhs[0]->user.lm_part_list;
+Parser_Lel_longest_match_part *__ref2 = (Parser_Lel_longest_match_part*)&rhs[1]->user.longest_match_part;
+Parser_Lel_lm_part_list *__ref3 = (Parser_Lel_lm_part_list*)&redLel->user.lm_part_list;
+Parser_Lel_lm_part_list *__ref4 = (Parser_Lel_lm_part_list*)&rhs[0]->user.lm_part_list;
#line 270 "rlparse.kl"
- if ( (&rhs[1]->user.longest_match_part)->lmPart != 0 )
- (&rhs[0]->user.lm_part_list)->lmPartList->append( (&rhs[1]->user.longest_match_part)->lmPart );
- (&redLel->user.lm_part_list)->lmPartList = (&rhs[0]->user.lm_part_list)->lmPartList;
+ if ( (__ref0)->lmPart != 0 )
+ (__ref1)->lmPartList->append( (__ref2)->lmPart );
+ (__ref3)->lmPartList = (__ref4)->lmPartList;
-#line 4258 "rlparse.cpp"
+#line 4322 "rlparse.cpp"
} break;
case 39: {
+Parser_Lel_lm_part_list *__ref0 = (Parser_Lel_lm_part_list*)&redLel->user.lm_part_list;
+Parser_Lel_longest_match_part *__ref1 = (Parser_Lel_longest_match_part*)&rhs[0]->user.longest_match_part;
+Parser_Lel_lm_part_list *__ref2 = (Parser_Lel_lm_part_list*)&redLel->user.lm_part_list;
+Parser_Lel_longest_match_part *__ref3 = (Parser_Lel_longest_match_part*)&rhs[0]->user.longest_match_part;
#line 277 "rlparse.kl"
/* Create a new list with the part. */
- (&redLel->user.lm_part_list)->lmPartList = new LmPartList;
- if ( (&rhs[0]->user.longest_match_part)->lmPart != 0 )
- (&redLel->user.lm_part_list)->lmPartList->append( (&rhs[0]->user.longest_match_part)->lmPart );
+ (__ref0)->lmPartList = new LmPartList;
+ if ( (__ref1)->lmPart != 0 )
+ (__ref2)->lmPartList->append( (__ref3)->lmPart );
-#line 4269 "rlparse.cpp"
+#line 4337 "rlparse.cpp"
} break;
case 40: {
+Parser_Lel_longest_match_part *__ref0 = (Parser_Lel_longest_match_part*)&redLel->user.longest_match_part;
#line 290 "rlparse.kl"
- (&redLel->user.longest_match_part)->lmPart = 0;
+ (__ref0)->lmPart = 0;
-#line 4275 "rlparse.cpp"
+#line 4344 "rlparse.cpp"
} break;
case 41: {
+Parser_Lel_longest_match_part *__ref0 = (Parser_Lel_longest_match_part*)&redLel->user.longest_match_part;
#line 292 "rlparse.kl"
- (&redLel->user.longest_match_part)->lmPart = 0;
+ (__ref0)->lmPart = 0;
-#line 4281 "rlparse.cpp"
+#line 4351 "rlparse.cpp"
} break;
case 42: {
+Parser_Lel_longest_match_part *__ref0 = (Parser_Lel_longest_match_part*)&redLel->user.longest_match_part;
+Parser_Lel_opt_lm_part_action *__ref1 = (Parser_Lel_opt_lm_part_action*)&rhs[1]->user.opt_lm_part_action;
+Parser_Lel_longest_match_part *__ref2 = (Parser_Lel_longest_match_part*)&redLel->user.longest_match_part;
+Parser_Lel_join *__ref3 = (Parser_Lel_join*)&rhs[0]->user.join;
+Token *__ref4 = (Token*)&rhs[2]->user.token;
+Parser_Lel_join *__ref5 = (Parser_Lel_join*)&rhs[0]->user.join;
+Token *__ref6 = (Token*)&rhs[2]->user.token;
#line 294 "rlparse.kl"
- (&redLel->user.longest_match_part)->lmPart = 0;
- Action *action = (&rhs[1]->user.opt_lm_part_action)->action;
+ (__ref0)->lmPart = 0;
+ Action *action = (__ref1)->action;
if ( action != 0 )
action->isLmAction = true;
- (&redLel->user.longest_match_part)->lmPart = new LongestMatchPart( (&rhs[0]->user.join)->join, action,
- (&rhs[2]->user.token)->loc, pd->nextLongestMatchId++ );
+ (__ref2)->lmPart = new LongestMatchPart( (__ref3)->join, action,
+ (__ref4)->loc, pd->nextLongestMatchId++ );
/* Provide a location to join. Unfortunately We don't
* have the start of the join as in other occurances. Use the end. */
- (&rhs[0]->user.join)->join->loc = (&rhs[2]->user.token)->loc;
+ (__ref5)->join->loc = (__ref6)->loc;
-#line 4298 "rlparse.cpp"
+#line 4375 "rlparse.cpp"
} break;
case 43: {
+Parser_Lel_opt_lm_part_action *__ref0 = (Parser_Lel_opt_lm_part_action*)&redLel->user.opt_lm_part_action;
+Parser_Lel_action_ref *__ref1 = (Parser_Lel_action_ref*)&rhs[1]->user.action_ref;
#line 313 "rlparse.kl"
- (&redLel->user.opt_lm_part_action)->action = (&rhs[1]->user.action_ref)->action;
+ (__ref0)->action = (__ref1)->action;
-#line 4306 "rlparse.cpp"
+#line 4385 "rlparse.cpp"
} break;
case 44: {
+Parser_Lel_opt_lm_part_action *__ref0 = (Parser_Lel_opt_lm_part_action*)&redLel->user.opt_lm_part_action;
+Parser_Lel_action_ref *__ref1 = (Parser_Lel_action_ref*)&rhs[0]->user.action_ref;
#line 317 "rlparse.kl"
- (&redLel->user.opt_lm_part_action)->action = (&rhs[0]->user.action_ref)->action;
+ (__ref0)->action = (__ref1)->action;
-#line 4314 "rlparse.cpp"
+#line 4395 "rlparse.cpp"
} break;
case 45: {
+Parser_Lel_opt_lm_part_action *__ref0 = (Parser_Lel_opt_lm_part_action*)&redLel->user.opt_lm_part_action;
#line 321 "rlparse.kl"
- (&redLel->user.opt_lm_part_action)->action = 0;
+ (__ref0)->action = 0;
-#line 4322 "rlparse.cpp"
+#line 4404 "rlparse.cpp"
} break;
case 46: {
+Parser_Lel_join *__ref0 = (Parser_Lel_join*)&rhs[0]->user.join;
+Parser_Lel_expression *__ref1 = (Parser_Lel_expression*)&rhs[2]->user.expression;
+Parser_Lel_join *__ref2 = (Parser_Lel_join*)&redLel->user.join;
+Parser_Lel_join *__ref3 = (Parser_Lel_join*)&rhs[0]->user.join;
#line 332 "rlparse.kl"
/* Append the expression to the list and return it. */
- (&rhs[0]->user.join)->join->exprList.append( (&rhs[2]->user.expression)->expression );
- (&redLel->user.join)->join = (&rhs[0]->user.join)->join;
+ (__ref0)->join->exprList.append( (__ref1)->expression );
+ (__ref2)->join = (__ref3)->join;
-#line 4332 "rlparse.cpp"
+#line 4418 "rlparse.cpp"
} break;
case 47: {
+Parser_Lel_join *__ref0 = (Parser_Lel_join*)&redLel->user.join;
+Parser_Lel_expression *__ref1 = (Parser_Lel_expression*)&rhs[0]->user.expression;
#line 338 "rlparse.kl"
- (&redLel->user.join)->join = new Join( (&rhs[0]->user.expression)->expression );
+ (__ref0)->join = new Join( (__ref1)->expression );
-#line 4340 "rlparse.cpp"
+#line 4428 "rlparse.cpp"
} break;
case 48: {
+Parser_Lel_expression *__ref0 = (Parser_Lel_expression*)&redLel->user.expression;
+Parser_Lel_expression *__ref1 = (Parser_Lel_expression*)&rhs[0]->user.expression;
+Parser_Lel_term_short *__ref2 = (Parser_Lel_term_short*)&rhs[2]->user.term_short;
#line 348 "rlparse.kl"
- (&redLel->user.expression)->expression = new Expression( (&rhs[0]->user.expression)->expression,
- (&rhs[2]->user.term_short)->term, Expression::OrType );
+ (__ref0)->expression = new Expression( (__ref1)->expression,
+ (__ref2)->term, Expression::OrType );
-#line 4349 "rlparse.cpp"
+#line 4440 "rlparse.cpp"
} break;
case 49: {
+Parser_Lel_expression *__ref0 = (Parser_Lel_expression*)&redLel->user.expression;
+Parser_Lel_expression *__ref1 = (Parser_Lel_expression*)&rhs[0]->user.expression;
+Parser_Lel_term_short *__ref2 = (Parser_Lel_term_short*)&rhs[2]->user.term_short;
#line 353 "rlparse.kl"
- (&redLel->user.expression)->expression = new Expression( (&rhs[0]->user.expression)->expression,
- (&rhs[2]->user.term_short)->term, Expression::IntersectType );
+ (__ref0)->expression = new Expression( (__ref1)->expression,
+ (__ref2)->term, Expression::IntersectType );
-#line 4358 "rlparse.cpp"
+#line 4452 "rlparse.cpp"
} break;
case 50: {
+Parser_Lel_expression *__ref0 = (Parser_Lel_expression*)&redLel->user.expression;
+Parser_Lel_expression *__ref1 = (Parser_Lel_expression*)&rhs[0]->user.expression;
+Parser_Lel_term_short *__ref2 = (Parser_Lel_term_short*)&rhs[2]->user.term_short;
#line 358 "rlparse.kl"
- (&redLel->user.expression)->expression = new Expression( (&rhs[0]->user.expression)->expression,
- (&rhs[2]->user.term_short)->term, Expression::SubtractType );
+ (__ref0)->expression = new Expression( (__ref1)->expression,
+ (__ref2)->term, Expression::SubtractType );
-#line 4367 "rlparse.cpp"
+#line 4464 "rlparse.cpp"
} break;
case 51: {
+Parser_Lel_expression *__ref0 = (Parser_Lel_expression*)&redLel->user.expression;
+Parser_Lel_expression *__ref1 = (Parser_Lel_expression*)&rhs[0]->user.expression;
+Parser_Lel_term_short *__ref2 = (Parser_Lel_term_short*)&rhs[2]->user.term_short;
#line 363 "rlparse.kl"
- (&redLel->user.expression)->expression = new Expression( (&rhs[0]->user.expression)->expression,
- (&rhs[2]->user.term_short)->term, Expression::StrongSubtractType );
+ (__ref0)->expression = new Expression( (__ref1)->expression,
+ (__ref2)->term, Expression::StrongSubtractType );
-#line 4376 "rlparse.cpp"
+#line 4476 "rlparse.cpp"
} break;
case 52: {
+Parser_Lel_expression *__ref0 = (Parser_Lel_expression*)&redLel->user.expression;
+Parser_Lel_term_short *__ref1 = (Parser_Lel_term_short*)&rhs[0]->user.term_short;
#line 368 "rlparse.kl"
- (&redLel->user.expression)->expression = new Expression( (&rhs[0]->user.term_short)->term );
+ (__ref0)->expression = new Expression( (__ref1)->term );
-#line 4384 "rlparse.cpp"
+#line 4486 "rlparse.cpp"
} break;
case 53: {
+Parser_Lel_term_short *__ref0 = (Parser_Lel_term_short*)&redLel->user.term_short;
+Parser_Lel_term *__ref1 = (Parser_Lel_term*)&rhs[0]->user.term;
#line 389 "rlparse.kl"
- (&redLel->user.term_short)->term = (&rhs[0]->user.term)->term;
+ (__ref0)->term = (__ref1)->term;
-#line 4392 "rlparse.cpp"
+#line 4496 "rlparse.cpp"
} break;
case 54: {
+Parser_Lel_term *__ref0 = (Parser_Lel_term*)&redLel->user.term;
+Parser_Lel_term *__ref1 = (Parser_Lel_term*)&rhs[0]->user.term;
+Parser_Lel_factor_with_label *__ref2 = (Parser_Lel_factor_with_label*)&rhs[1]->user.factor_with_label;
#line 399 "rlparse.kl"
- (&redLel->user.term)->term = new Term( (&rhs[0]->user.term)->term, (&rhs[1]->user.factor_with_label)->factorWithAug );
+ (__ref0)->term = new Term( (__ref1)->term, (__ref2)->factorWithAug );
-#line 4400 "rlparse.cpp"
+#line 4507 "rlparse.cpp"
} break;
case 55: {
+Parser_Lel_term *__ref0 = (Parser_Lel_term*)&redLel->user.term;
+Parser_Lel_term *__ref1 = (Parser_Lel_term*)&rhs[0]->user.term;
+Parser_Lel_factor_with_label *__ref2 = (Parser_Lel_factor_with_label*)&rhs[2]->user.factor_with_label;
#line 403 "rlparse.kl"
- (&redLel->user.term)->term = new Term( (&rhs[0]->user.term)->term, (&rhs[2]->user.factor_with_label)->factorWithAug );
+ (__ref0)->term = new Term( (__ref1)->term, (__ref2)->factorWithAug );
-#line 4408 "rlparse.cpp"
+#line 4518 "rlparse.cpp"
} break;
case 56: {
+Parser_Lel_term *__ref0 = (Parser_Lel_term*)&redLel->user.term;
+Parser_Lel_term *__ref1 = (Parser_Lel_term*)&rhs[0]->user.term;
+Parser_Lel_factor_with_label *__ref2 = (Parser_Lel_factor_with_label*)&rhs[2]->user.factor_with_label;
#line 407 "rlparse.kl"
- (&redLel->user.term)->term = new Term( (&rhs[0]->user.term)->term, (&rhs[2]->user.factor_with_label)->factorWithAug, Term::RightStartType );
+ (__ref0)->term = new Term( (__ref1)->term, (__ref2)->factorWithAug, Term::RightStartType );
-#line 4416 "rlparse.cpp"
+#line 4529 "rlparse.cpp"
} break;
case 57: {
+Parser_Lel_term *__ref0 = (Parser_Lel_term*)&redLel->user.term;
+Parser_Lel_term *__ref1 = (Parser_Lel_term*)&rhs[0]->user.term;
+Parser_Lel_factor_with_label *__ref2 = (Parser_Lel_factor_with_label*)&rhs[2]->user.factor_with_label;
#line 411 "rlparse.kl"
- (&redLel->user.term)->term = new Term( (&rhs[0]->user.term)->term, (&rhs[2]->user.factor_with_label)->factorWithAug, Term::RightFinishType );
+ (__ref0)->term = new Term( (__ref1)->term, (__ref2)->factorWithAug, Term::RightFinishType );
-#line 4424 "rlparse.cpp"
+#line 4540 "rlparse.cpp"
} break;
case 58: {
+Parser_Lel_term *__ref0 = (Parser_Lel_term*)&redLel->user.term;
+Parser_Lel_term *__ref1 = (Parser_Lel_term*)&rhs[0]->user.term;
+Parser_Lel_factor_with_label *__ref2 = (Parser_Lel_factor_with_label*)&rhs[2]->user.factor_with_label;
#line 415 "rlparse.kl"
- (&redLel->user.term)->term = new Term( (&rhs[0]->user.term)->term,
- (&rhs[2]->user.factor_with_label)->factorWithAug, Term::LeftType );
+ (__ref0)->term = new Term( (__ref1)->term,
+ (__ref2)->factorWithAug, Term::LeftType );
-#line 4433 "rlparse.cpp"
+#line 4552 "rlparse.cpp"
} break;
case 59: {
+Parser_Lel_term *__ref0 = (Parser_Lel_term*)&redLel->user.term;
+Parser_Lel_factor_with_label *__ref1 = (Parser_Lel_factor_with_label*)&rhs[0]->user.factor_with_label;
#line 420 "rlparse.kl"
- (&redLel->user.term)->term = new Term( (&rhs[0]->user.factor_with_label)->factorWithAug );
+ (__ref0)->term = new Term( (__ref1)->factorWithAug );
-#line 4441 "rlparse.cpp"
+#line 4562 "rlparse.cpp"
} break;
case 60: {
+Parser_Lel_factor_with_label *__ref0 = (Parser_Lel_factor_with_label*)&rhs[2]->user.factor_with_label;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Token *__ref2 = (Token*)&rhs[0]->user.token;
+Parser_Lel_factor_with_label *__ref3 = (Parser_Lel_factor_with_label*)&redLel->user.factor_with_label;
+Parser_Lel_factor_with_label *__ref4 = (Parser_Lel_factor_with_label*)&rhs[2]->user.factor_with_label;
#line 430 "rlparse.kl"
/* Add the label to the list and pass the factor up. */
- (&rhs[2]->user.factor_with_label)->factorWithAug->labels.prepend( Label((&rhs[0]->user.token)->loc, (&rhs[0]->user.token)->data) );
- (&redLel->user.factor_with_label)->factorWithAug = (&rhs[2]->user.factor_with_label)->factorWithAug;
+ (__ref0)->factorWithAug->labels.prepend( Label((__ref1)->loc, (__ref2)->data) );
+ (__ref3)->factorWithAug = (__ref4)->factorWithAug;
-#line 4451 "rlparse.cpp"
+#line 4577 "rlparse.cpp"
} break;
case 61: {
+Parser_Lel_factor_with_label *__ref0 = (Parser_Lel_factor_with_label*)&redLel->user.factor_with_label;
+Parser_Lel_factor_with_ep *__ref1 = (Parser_Lel_factor_with_ep*)&rhs[0]->user.factor_with_ep;
#line 436 "rlparse.kl"
- (&redLel->user.factor_with_label)->factorWithAug = (&rhs[0]->user.factor_with_ep)->factorWithAug;
+ (__ref0)->factorWithAug = (__ref1)->factorWithAug;
-#line 4459 "rlparse.cpp"
+#line 4587 "rlparse.cpp"
} break;
case 62: {
+Parser_Lel_factor_with_ep *__ref0 = (Parser_Lel_factor_with_ep*)&rhs[0]->user.factor_with_ep;
+Token *__ref1 = (Token*)&rhs[1]->user.token;
+Parser_Lel_factor_with_ep *__ref2 = (Parser_Lel_factor_with_ep*)&redLel->user.factor_with_ep;
+Parser_Lel_factor_with_ep *__ref3 = (Parser_Lel_factor_with_ep*)&rhs[0]->user.factor_with_ep;
#line 446 "rlparse.kl"
/* Add the target to the list and return the factor object. */
- (&rhs[0]->user.factor_with_ep)->factorWithAug->epsilonLinks.append( EpsilonLink( (&rhs[1]->user.token)->loc, nameRef ) );
- (&redLel->user.factor_with_ep)->factorWithAug = (&rhs[0]->user.factor_with_ep)->factorWithAug;
+ (__ref0)->factorWithAug->epsilonLinks.append( EpsilonLink( (__ref1)->loc, nameRef ) );
+ (__ref2)->factorWithAug = (__ref3)->factorWithAug;
-#line 4469 "rlparse.cpp"
+#line 4601 "rlparse.cpp"
} break;
case 63: {
+Parser_Lel_factor_with_ep *__ref0 = (Parser_Lel_factor_with_ep*)&redLel->user.factor_with_ep;
+Parser_Lel_factor_with_aug *__ref1 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
#line 452 "rlparse.kl"
- (&redLel->user.factor_with_ep)->factorWithAug = (&rhs[0]->user.factor_with_aug)->factorWithAug;
+ (__ref0)->factorWithAug = (__ref1)->factorWithAug;
-#line 4477 "rlparse.cpp"
+#line 4611 "rlparse.cpp"
} break;
case 64: {
+Parser_Lel_factor_with_aug *__ref0 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
+Parser_Lel_aug_type *__ref1 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_action_ref *__ref3 = (Parser_Lel_action_ref*)&rhs[2]->user.action_ref;
+Parser_Lel_factor_with_aug *__ref4 = (Parser_Lel_factor_with_aug*)&redLel->user.factor_with_aug;
+Parser_Lel_factor_with_aug *__ref5 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
#line 462 "rlparse.kl"
/* Append the action to the factorWithAug, record the refernce from
* factorWithAug to the action and pass up the factorWithAug. */
- (&rhs[0]->user.factor_with_aug)->factorWithAug->actions.append(
- ParserAction( (&rhs[1]->user.aug_type)->loc, (&rhs[1]->user.aug_type)->augType, 0, (&rhs[2]->user.action_ref)->action ) );
- (&redLel->user.factor_with_aug)->factorWithAug = (&rhs[0]->user.factor_with_aug)->factorWithAug;
+ (__ref0)->factorWithAug->actions.append(
+ ParserAction( (__ref1)->loc, (__ref2)->augType, 0, (__ref3)->action ) );
+ (__ref4)->factorWithAug = (__ref5)->factorWithAug;
-#line 4489 "rlparse.cpp"
+#line 4629 "rlparse.cpp"
} break;
case 65: {
+Parser_Lel_factor_with_aug *__ref0 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
+Parser_Lel_aug_type *__ref1 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_priority_aug *__ref2 = (Parser_Lel_priority_aug*)&rhs[2]->user.priority_aug;
+Parser_Lel_factor_with_aug *__ref3 = (Parser_Lel_factor_with_aug*)&redLel->user.factor_with_aug;
+Parser_Lel_factor_with_aug *__ref4 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
#line 470 "rlparse.kl"
/* Append the named priority to the factorWithAug and pass it up. */
- (&rhs[0]->user.factor_with_aug)->factorWithAug->priorityAugs.append(
- PriorityAug( (&rhs[1]->user.aug_type)->augType, pd->curDefPriorKey, (&rhs[2]->user.priority_aug)->priorityNum ) );
- (&redLel->user.factor_with_aug)->factorWithAug = (&rhs[0]->user.factor_with_aug)->factorWithAug;
+ (__ref0)->factorWithAug->priorityAugs.append(
+ PriorityAug( (__ref1)->augType, pd->curDefPriorKey, (__ref2)->priorityNum ) );
+ (__ref3)->factorWithAug = (__ref4)->factorWithAug;
-#line 4500 "rlparse.cpp"
+#line 4645 "rlparse.cpp"
} break;
case 66: {
+Parser_Lel_factor_with_aug *__ref0 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
+Parser_Lel_aug_type *__ref1 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_priority_name *__ref2 = (Parser_Lel_priority_name*)&rhs[3]->user.priority_name;
+Parser_Lel_priority_aug *__ref3 = (Parser_Lel_priority_aug*)&rhs[5]->user.priority_aug;
+Parser_Lel_factor_with_aug *__ref4 = (Parser_Lel_factor_with_aug*)&redLel->user.factor_with_aug;
+Parser_Lel_factor_with_aug *__ref5 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
#line 477 "rlparse.kl"
/* Append the priority using a default name. */
- (&rhs[0]->user.factor_with_aug)->factorWithAug->priorityAugs.append(
- PriorityAug( (&rhs[1]->user.aug_type)->augType, (&rhs[3]->user.priority_name)->priorityName, (&rhs[5]->user.priority_aug)->priorityNum ) );
- (&redLel->user.factor_with_aug)->factorWithAug = (&rhs[0]->user.factor_with_aug)->factorWithAug;
+ (__ref0)->factorWithAug->priorityAugs.append(
+ PriorityAug( (__ref1)->augType, (__ref2)->priorityName, (__ref3)->priorityNum ) );
+ (__ref4)->factorWithAug = (__ref5)->factorWithAug;
-#line 4511 "rlparse.cpp"
+#line 4662 "rlparse.cpp"
} break;
case 67: {
+Parser_Lel_factor_with_aug *__ref0 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
+Parser_Lel_aug_type *__ref1 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_action_ref *__ref3 = (Parser_Lel_action_ref*)&rhs[2]->user.action_ref;
+Parser_Lel_factor_with_aug *__ref4 = (Parser_Lel_factor_with_aug*)&redLel->user.factor_with_aug;
+Parser_Lel_factor_with_aug *__ref5 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
#line 484 "rlparse.kl"
- (&rhs[0]->user.factor_with_aug)->factorWithAug->conditions.append( ConditionTest( (&rhs[1]->user.aug_type)->loc,
- (&rhs[1]->user.aug_type)->augType, (&rhs[2]->user.action_ref)->action, true ) );
- (&redLel->user.factor_with_aug)->factorWithAug = (&rhs[0]->user.factor_with_aug)->factorWithAug;
+ (__ref0)->factorWithAug->conditions.append( ConditionTest( (__ref1)->loc,
+ (__ref2)->augType, (__ref3)->action, true ) );
+ (__ref4)->factorWithAug = (__ref5)->factorWithAug;
-#line 4521 "rlparse.cpp"
+#line 4678 "rlparse.cpp"
} break;
case 68: {
+Parser_Lel_factor_with_aug *__ref0 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
+Parser_Lel_aug_type *__ref1 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_action_ref *__ref3 = (Parser_Lel_action_ref*)&rhs[3]->user.action_ref;
+Parser_Lel_factor_with_aug *__ref4 = (Parser_Lel_factor_with_aug*)&redLel->user.factor_with_aug;
+Parser_Lel_factor_with_aug *__ref5 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
#line 490 "rlparse.kl"
- (&rhs[0]->user.factor_with_aug)->factorWithAug->conditions.append( ConditionTest( (&rhs[1]->user.aug_type)->loc,
- (&rhs[1]->user.aug_type)->augType, (&rhs[3]->user.action_ref)->action, false ) );
- (&redLel->user.factor_with_aug)->factorWithAug = (&rhs[0]->user.factor_with_aug)->factorWithAug;
+ (__ref0)->factorWithAug->conditions.append( ConditionTest( (__ref1)->loc,
+ (__ref2)->augType, (__ref3)->action, false ) );
+ (__ref4)->factorWithAug = (__ref5)->factorWithAug;
-#line 4531 "rlparse.cpp"
+#line 4694 "rlparse.cpp"
} break;
case 69: {
+Parser_Lel_factor_with_aug *__ref0 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
+Parser_Lel_aug_type *__ref1 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_action_ref *__ref3 = (Parser_Lel_action_ref*)&rhs[2]->user.action_ref;
+Parser_Lel_factor_with_aug *__ref4 = (Parser_Lel_factor_with_aug*)&redLel->user.factor_with_aug;
+Parser_Lel_factor_with_aug *__ref5 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
#line 496 "rlparse.kl"
/* Append the action, pass it up. */
- (&rhs[0]->user.factor_with_aug)->factorWithAug->actions.append( ParserAction( (&rhs[1]->user.aug_type)->loc,
- (&rhs[1]->user.aug_type)->augType, 0, (&rhs[2]->user.action_ref)->action ) );
- (&redLel->user.factor_with_aug)->factorWithAug = (&rhs[0]->user.factor_with_aug)->factorWithAug;
+ (__ref0)->factorWithAug->actions.append( ParserAction( (__ref1)->loc,
+ (__ref2)->augType, 0, (__ref3)->action ) );
+ (__ref4)->factorWithAug = (__ref5)->factorWithAug;
-#line 4542 "rlparse.cpp"
+#line 4711 "rlparse.cpp"
} break;
case 70: {
+Parser_Lel_factor_with_aug *__ref0 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
+Parser_Lel_aug_type *__ref1 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_action_ref *__ref3 = (Parser_Lel_action_ref*)&rhs[2]->user.action_ref;
+Parser_Lel_factor_with_aug *__ref4 = (Parser_Lel_factor_with_aug*)&redLel->user.factor_with_aug;
+Parser_Lel_factor_with_aug *__ref5 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
#line 503 "rlparse.kl"
/* Append the action, pass it up. */
- (&rhs[0]->user.factor_with_aug)->factorWithAug->actions.append( ParserAction( (&rhs[1]->user.aug_type)->loc,
- (&rhs[1]->user.aug_type)->augType, 0, (&rhs[2]->user.action_ref)->action ) );
- (&redLel->user.factor_with_aug)->factorWithAug = (&rhs[0]->user.factor_with_aug)->factorWithAug;
+ (__ref0)->factorWithAug->actions.append( ParserAction( (__ref1)->loc,
+ (__ref2)->augType, 0, (__ref3)->action ) );
+ (__ref4)->factorWithAug = (__ref5)->factorWithAug;
-#line 4553 "rlparse.cpp"
+#line 4728 "rlparse.cpp"
} break;
case 71: {
+Parser_Lel_factor_with_aug *__ref0 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
+Parser_Lel_aug_type *__ref1 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_action_ref *__ref3 = (Parser_Lel_action_ref*)&rhs[2]->user.action_ref;
+Parser_Lel_factor_with_aug *__ref4 = (Parser_Lel_factor_with_aug*)&redLel->user.factor_with_aug;
+Parser_Lel_factor_with_aug *__ref5 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
#line 510 "rlparse.kl"
/* Append the action, pass it up. */
- (&rhs[0]->user.factor_with_aug)->factorWithAug->actions.append( ParserAction( (&rhs[1]->user.aug_type)->loc,
- (&rhs[1]->user.aug_type)->augType, 0, (&rhs[2]->user.action_ref)->action ) );
- (&redLel->user.factor_with_aug)->factorWithAug = (&rhs[0]->user.factor_with_aug)->factorWithAug;
+ (__ref0)->factorWithAug->actions.append( ParserAction( (__ref1)->loc,
+ (__ref2)->augType, 0, (__ref3)->action ) );
+ (__ref4)->factorWithAug = (__ref5)->factorWithAug;
-#line 4564 "rlparse.cpp"
+#line 4745 "rlparse.cpp"
} break;
case 72: {
+Parser_Lel_factor_with_aug *__ref0 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
+Parser_Lel_aug_type *__ref1 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_action_ref *__ref3 = (Parser_Lel_action_ref*)&rhs[2]->user.action_ref;
+Parser_Lel_factor_with_aug *__ref4 = (Parser_Lel_factor_with_aug*)&redLel->user.factor_with_aug;
+Parser_Lel_factor_with_aug *__ref5 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
#line 517 "rlparse.kl"
/* Append the action to the factorWithAug, record the refernce from
* factorWithAug to the action and pass up the factorWithAug. */
- (&rhs[0]->user.factor_with_aug)->factorWithAug->actions.append( ParserAction( (&rhs[1]->user.aug_type)->loc,
- (&rhs[1]->user.aug_type)->augType, pd->curDefLocalErrKey, (&rhs[2]->user.action_ref)->action ) );
- (&redLel->user.factor_with_aug)->factorWithAug = (&rhs[0]->user.factor_with_aug)->factorWithAug;
+ (__ref0)->factorWithAug->actions.append( ParserAction( (__ref1)->loc,
+ (__ref2)->augType, pd->curDefLocalErrKey, (__ref3)->action ) );
+ (__ref4)->factorWithAug = (__ref5)->factorWithAug;
-#line 4576 "rlparse.cpp"
+#line 4763 "rlparse.cpp"
} break;
case 73: {
+Parser_Lel_factor_with_aug *__ref0 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
+Parser_Lel_aug_type *__ref1 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_action_ref *__ref3 = (Parser_Lel_action_ref*)&rhs[2]->user.action_ref;
+Parser_Lel_factor_with_aug *__ref4 = (Parser_Lel_factor_with_aug*)&redLel->user.factor_with_aug;
+Parser_Lel_factor_with_aug *__ref5 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
#line 525 "rlparse.kl"
/* Append the action to the factorWithAug, record the refernce from
* factorWithAug to the action and pass up the factorWithAug. */
- (&rhs[0]->user.factor_with_aug)->factorWithAug->actions.append( ParserAction( (&rhs[1]->user.aug_type)->loc,
- (&rhs[1]->user.aug_type)->augType, pd->curDefLocalErrKey, (&rhs[2]->user.action_ref)->action ) );
- (&redLel->user.factor_with_aug)->factorWithAug = (&rhs[0]->user.factor_with_aug)->factorWithAug;
+ (__ref0)->factorWithAug->actions.append( ParserAction( (__ref1)->loc,
+ (__ref2)->augType, pd->curDefLocalErrKey, (__ref3)->action ) );
+ (__ref4)->factorWithAug = (__ref5)->factorWithAug;
-#line 4588 "rlparse.cpp"
+#line 4781 "rlparse.cpp"
} break;
case 74: {
+Parser_Lel_factor_with_aug *__ref0 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
+Parser_Lel_aug_type *__ref1 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&rhs[1]->user.aug_type;
+Parser_Lel_local_err_name *__ref3 = (Parser_Lel_local_err_name*)&rhs[3]->user.local_err_name;
+Parser_Lel_action_ref *__ref4 = (Parser_Lel_action_ref*)&rhs[5]->user.action_ref;
+Parser_Lel_factor_with_aug *__ref5 = (Parser_Lel_factor_with_aug*)&redLel->user.factor_with_aug;
+Parser_Lel_factor_with_aug *__ref6 = (Parser_Lel_factor_with_aug*)&rhs[0]->user.factor_with_aug;
#line 533 "rlparse.kl"
/* Append the action to the factorWithAug, record the refernce from
* factorWithAug to the action and pass up the factorWithAug. */
- (&rhs[0]->user.factor_with_aug)->factorWithAug->actions.append( ParserAction( (&rhs[1]->user.aug_type)->loc,
- (&rhs[1]->user.aug_type)->augType, (&rhs[3]->user.local_err_name)->error_name, (&rhs[5]->user.action_ref)->action ) );
- (&redLel->user.factor_with_aug)->factorWithAug = (&rhs[0]->user.factor_with_aug)->factorWithAug;
+ (__ref0)->factorWithAug->actions.append( ParserAction( (__ref1)->loc,
+ (__ref2)->augType, (__ref3)->error_name, (__ref4)->action ) );
+ (__ref5)->factorWithAug = (__ref6)->factorWithAug;
-#line 4600 "rlparse.cpp"
+#line 4800 "rlparse.cpp"
} break;
case 75: {
+Parser_Lel_factor_with_aug *__ref0 = (Parser_Lel_factor_with_aug*)&redLel->user.factor_with_aug;
+Parser_Lel_factor_with_rep *__ref1 = (Parser_Lel_factor_with_rep*)&rhs[0]->user.factor_with_rep;
#line 541 "rlparse.kl"
- (&redLel->user.factor_with_aug)->factorWithAug = new FactorWithAug( (&rhs[0]->user.factor_with_rep)->factorWithRep );
+ (__ref0)->factorWithAug = new FactorWithAug( (__ref1)->factorWithRep );
-#line 4608 "rlparse.cpp"
+#line 4810 "rlparse.cpp"
} break;
case 76: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 554 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_finish;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_finish;
-#line 4614 "rlparse.cpp"
+#line 4819 "rlparse.cpp"
} break;
case 77: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 555 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_leave;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_leave;
-#line 4620 "rlparse.cpp"
+#line 4828 "rlparse.cpp"
} break;
case 78: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 556 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_all;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_all;
-#line 4626 "rlparse.cpp"
+#line 4837 "rlparse.cpp"
} break;
case 79: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 557 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_start;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_start;
-#line 4632 "rlparse.cpp"
+#line 4846 "rlparse.cpp"
} break;
case 80: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 562 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_start;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_start;
-#line 4638 "rlparse.cpp"
+#line 4855 "rlparse.cpp"
} break;
case 81: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 563 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_start;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_start;
-#line 4644 "rlparse.cpp"
+#line 4864 "rlparse.cpp"
} break;
case 82: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 564 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_all;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_all;
-#line 4650 "rlparse.cpp"
+#line 4873 "rlparse.cpp"
} break;
case 83: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 565 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_all;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_all;
-#line 4656 "rlparse.cpp"
+#line 4882 "rlparse.cpp"
} break;
case 84: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 566 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_leave;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_leave;
-#line 4662 "rlparse.cpp"
+#line 4891 "rlparse.cpp"
} break;
case 85: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 567 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_leave;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_leave;
-#line 4668 "rlparse.cpp"
+#line 4900 "rlparse.cpp"
} break;
case 86: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 568 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_all;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_all;
-#line 4674 "rlparse.cpp"
+#line 4909 "rlparse.cpp"
} break;
case 87: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 569 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_start;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_start;
-#line 4680 "rlparse.cpp"
+#line 4918 "rlparse.cpp"
} break;
case 88: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 570 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_leave;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_leave;
-#line 4686 "rlparse.cpp"
+#line 4927 "rlparse.cpp"
} break;
case 89: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 579 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_start_to_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_start_to_state;
-#line 4692 "rlparse.cpp"
+#line 4936 "rlparse.cpp"
} break;
case 90: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 581 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_start_to_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_start_to_state;
-#line 4698 "rlparse.cpp"
+#line 4945 "rlparse.cpp"
} break;
case 91: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 584 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_start_to_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_start_to_state;
-#line 4704 "rlparse.cpp"
+#line 4954 "rlparse.cpp"
} break;
case 92: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 586 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_start_to_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_start_to_state;
-#line 4710 "rlparse.cpp"
+#line 4963 "rlparse.cpp"
} break;
case 93: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 589 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_all_to_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_all_to_state;
-#line 4716 "rlparse.cpp"
+#line 4972 "rlparse.cpp"
} break;
case 94: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 591 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_all_to_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_all_to_state;
-#line 4722 "rlparse.cpp"
+#line 4981 "rlparse.cpp"
} break;
case 95: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 594 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_final_to_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_final_to_state;
-#line 4728 "rlparse.cpp"
+#line 4990 "rlparse.cpp"
} break;
case 96: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 596 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_final_to_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_final_to_state;
-#line 4734 "rlparse.cpp"
+#line 4999 "rlparse.cpp"
} break;
case 97: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 599 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_final_to_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_final_to_state;
-#line 4740 "rlparse.cpp"
+#line 5008 "rlparse.cpp"
} break;
case 98: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 601 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_final_to_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_final_to_state;
-#line 4746 "rlparse.cpp"
+#line 5017 "rlparse.cpp"
} break;
case 99: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 604 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_middle_to_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_middle_to_state;
-#line 4752 "rlparse.cpp"
+#line 5026 "rlparse.cpp"
} break;
case 100: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 606 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_middle_to_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_middle_to_state;
-#line 4758 "rlparse.cpp"
+#line 5035 "rlparse.cpp"
} break;
case 101: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 615 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_start_from_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_start_from_state;
-#line 4764 "rlparse.cpp"
+#line 5044 "rlparse.cpp"
} break;
case 102: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 617 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_start_from_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_start_from_state;
-#line 4770 "rlparse.cpp"
+#line 5053 "rlparse.cpp"
} break;
case 103: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 620 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_start_from_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_start_from_state;
-#line 4776 "rlparse.cpp"
+#line 5062 "rlparse.cpp"
} break;
case 104: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 622 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_start_from_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_start_from_state;
-#line 4782 "rlparse.cpp"
+#line 5071 "rlparse.cpp"
} break;
case 105: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 625 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_all_from_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_all_from_state;
-#line 4788 "rlparse.cpp"
+#line 5080 "rlparse.cpp"
} break;
case 106: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 627 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_all_from_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_all_from_state;
-#line 4794 "rlparse.cpp"
+#line 5089 "rlparse.cpp"
} break;
case 107: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 630 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_final_from_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_final_from_state;
-#line 4800 "rlparse.cpp"
+#line 5098 "rlparse.cpp"
} break;
case 108: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 632 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_final_from_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_final_from_state;
-#line 4806 "rlparse.cpp"
+#line 5107 "rlparse.cpp"
} break;
case 109: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 635 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_final_from_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_final_from_state;
-#line 4812 "rlparse.cpp"
+#line 5116 "rlparse.cpp"
} break;
case 110: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 637 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_final_from_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_final_from_state;
-#line 4818 "rlparse.cpp"
+#line 5125 "rlparse.cpp"
} break;
case 111: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 640 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_middle_from_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_middle_from_state;
-#line 4824 "rlparse.cpp"
+#line 5134 "rlparse.cpp"
} break;
case 112: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 642 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_middle_from_state;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_middle_from_state;
-#line 4830 "rlparse.cpp"
+#line 5143 "rlparse.cpp"
} break;
case 113: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 651 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_start_eof;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_start_eof;
-#line 4836 "rlparse.cpp"
+#line 5152 "rlparse.cpp"
} break;
case 114: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 653 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_start_eof;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_start_eof;
-#line 4842 "rlparse.cpp"
+#line 5161 "rlparse.cpp"
} break;
case 115: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 656 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_start_eof;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_start_eof;
-#line 4848 "rlparse.cpp"
+#line 5170 "rlparse.cpp"
} break;
case 116: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 658 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_start_eof;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_start_eof;
-#line 4854 "rlparse.cpp"
+#line 5179 "rlparse.cpp"
} break;
case 117: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 661 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_all_eof;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_all_eof;
-#line 4860 "rlparse.cpp"
+#line 5188 "rlparse.cpp"
} break;
case 118: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 663 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_all_eof;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_all_eof;
-#line 4866 "rlparse.cpp"
+#line 5197 "rlparse.cpp"
} break;
case 119: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 666 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_final_eof;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_final_eof;
-#line 4872 "rlparse.cpp"
+#line 5206 "rlparse.cpp"
} break;
case 120: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 668 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_final_eof;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_final_eof;
-#line 4878 "rlparse.cpp"
+#line 5215 "rlparse.cpp"
} break;
case 121: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 671 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_final_eof;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_final_eof;
-#line 4884 "rlparse.cpp"
+#line 5224 "rlparse.cpp"
} break;
case 122: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 673 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_final_eof;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_final_eof;
-#line 4890 "rlparse.cpp"
+#line 5233 "rlparse.cpp"
} break;
case 123: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 676 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_middle_eof;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_middle_eof;
-#line 4896 "rlparse.cpp"
+#line 5242 "rlparse.cpp"
} break;
case 124: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 678 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_middle_eof;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_middle_eof;
-#line 4902 "rlparse.cpp"
+#line 5251 "rlparse.cpp"
} break;
case 125: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 687 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_start_gbl_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_start_gbl_error;
-#line 4908 "rlparse.cpp"
+#line 5260 "rlparse.cpp"
} break;
case 126: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 689 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_start_gbl_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_start_gbl_error;
-#line 4914 "rlparse.cpp"
+#line 5269 "rlparse.cpp"
} break;
case 127: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 692 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_start_gbl_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_start_gbl_error;
-#line 4920 "rlparse.cpp"
+#line 5278 "rlparse.cpp"
} break;
case 128: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 694 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_start_gbl_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_start_gbl_error;
-#line 4926 "rlparse.cpp"
+#line 5287 "rlparse.cpp"
} break;
case 129: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 697 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_all_gbl_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_all_gbl_error;
-#line 4932 "rlparse.cpp"
+#line 5296 "rlparse.cpp"
} break;
case 130: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 699 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_all_gbl_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_all_gbl_error;
-#line 4938 "rlparse.cpp"
+#line 5305 "rlparse.cpp"
} break;
case 131: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 702 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_final_gbl_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_final_gbl_error;
-#line 4944 "rlparse.cpp"
+#line 5314 "rlparse.cpp"
} break;
case 132: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 704 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_final_gbl_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_final_gbl_error;
-#line 4950 "rlparse.cpp"
+#line 5323 "rlparse.cpp"
} break;
case 133: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 707 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_final_gbl_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_final_gbl_error;
-#line 4956 "rlparse.cpp"
+#line 5332 "rlparse.cpp"
} break;
case 134: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 709 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_final_gbl_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_final_gbl_error;
-#line 4962 "rlparse.cpp"
+#line 5341 "rlparse.cpp"
} break;
case 135: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 712 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_middle_gbl_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_middle_gbl_error;
-#line 4968 "rlparse.cpp"
+#line 5350 "rlparse.cpp"
} break;
case 136: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 714 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_middle_gbl_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_middle_gbl_error;
-#line 4974 "rlparse.cpp"
+#line 5359 "rlparse.cpp"
} break;
case 137: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 724 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_start_local_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_start_local_error;
-#line 4980 "rlparse.cpp"
+#line 5368 "rlparse.cpp"
} break;
case 138: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 726 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_start_local_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_start_local_error;
-#line 4986 "rlparse.cpp"
+#line 5377 "rlparse.cpp"
} break;
case 139: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 729 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_start_local_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_start_local_error;
-#line 4992 "rlparse.cpp"
+#line 5386 "rlparse.cpp"
} break;
case 140: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 731 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_start_local_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_start_local_error;
-#line 4998 "rlparse.cpp"
+#line 5395 "rlparse.cpp"
} break;
case 141: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 734 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_all_local_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_all_local_error;
-#line 5004 "rlparse.cpp"
+#line 5404 "rlparse.cpp"
} break;
case 142: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 736 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_all_local_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_all_local_error;
-#line 5010 "rlparse.cpp"
+#line 5413 "rlparse.cpp"
} break;
case 143: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 739 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_final_local_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_final_local_error;
-#line 5016 "rlparse.cpp"
+#line 5422 "rlparse.cpp"
} break;
case 144: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 741 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_final_local_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_final_local_error;
-#line 5022 "rlparse.cpp"
+#line 5431 "rlparse.cpp"
} break;
case 145: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 744 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_final_local_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_final_local_error;
-#line 5028 "rlparse.cpp"
+#line 5440 "rlparse.cpp"
} break;
case 146: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 746 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_not_final_local_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_not_final_local_error;
-#line 5034 "rlparse.cpp"
+#line 5449 "rlparse.cpp"
} break;
case 147: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 749 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_middle_local_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_middle_local_error;
-#line 5040 "rlparse.cpp"
+#line 5458 "rlparse.cpp"
} break;
case 148: {
+Parser_Lel_aug_type *__ref0 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_aug_type *__ref2 = (Parser_Lel_aug_type*)&redLel->user.aug_type;
#line 751 "rlparse.kl"
- (&redLel->user.aug_type)->loc = (&rhs[0]->user.token)->loc; (&redLel->user.aug_type)->augType = at_middle_local_error;
+ (__ref0)->loc = (__ref1)->loc; (__ref2)->augType = at_middle_local_error;
-#line 5046 "rlparse.cpp"
+#line 5467 "rlparse.cpp"
} break;
case 149: {
+Parser_Lel_action_ref *__ref0 = (Parser_Lel_action_ref*)&redLel->user.action_ref;
+Parser_Lel_action_ref *__ref1 = (Parser_Lel_action_ref*)&rhs[0]->user.action_ref;
#line 764 "rlparse.kl"
- (&redLel->user.action_ref)->action = (&rhs[0]->user.action_ref)->action;
+ (__ref0)->action = (__ref1)->action;
-#line 5052 "rlparse.cpp"
+#line 5475 "rlparse.cpp"
} break;
case 150: {
+Parser_Lel_action_ref *__ref0 = (Parser_Lel_action_ref*)&redLel->user.action_ref;
+Parser_Lel_action_ref *__ref1 = (Parser_Lel_action_ref*)&rhs[1]->user.action_ref;
#line 765 "rlparse.kl"
- (&redLel->user.action_ref)->action = (&rhs[1]->user.action_ref)->action;
+ (__ref0)->action = (__ref1)->action;
-#line 5058 "rlparse.cpp"
+#line 5483 "rlparse.cpp"
} break;
case 151: {
+Parser_Lel_action_ref *__ref0 = (Parser_Lel_action_ref*)&redLel->user.action_ref;
+Parser_Lel_action_ref *__ref1 = (Parser_Lel_action_ref*)&rhs[0]->user.action_ref;
#line 766 "rlparse.kl"
- (&redLel->user.action_ref)->action = (&rhs[0]->user.action_ref)->action;
+ (__ref0)->action = (__ref1)->action;
-#line 5064 "rlparse.cpp"
+#line 5491 "rlparse.cpp"
} break;
case 152: {
+Token *__ref0 = (Token*)&rhs[0]->user.token;
+Parser_Lel_action_ref *__ref1 = (Parser_Lel_action_ref*)&redLel->user.action_ref;
+Token *__ref2 = (Token*)&rhs[0]->user.token;
+Token *__ref3 = (Token*)&rhs[0]->user.token;
+Parser_Lel_action_ref *__ref4 = (Parser_Lel_action_ref*)&redLel->user.action_ref;
#line 771 "rlparse.kl"
/* Set the name in the actionDict. */
- Action *action = pd->actionDict.find( (&rhs[0]->user.token)->data );
+ Action *action = pd->actionDict.find( (__ref0)->data );
if ( action != 0 ) {
/* Pass up the action element */
- (&redLel->user.action_ref)->action = action;
+ (__ref1)->action = action;
}
else {
/* Will recover by returning null as the action. */
- error((&rhs[0]->user.token)->loc) << "action lookup of \"" << (&rhs[0]->user.token)->data << "\" failed" << endl;
- (&redLel->user.action_ref)->action = 0;
+ error((__ref2)->loc) << "action lookup of \"" << (__ref3)->data << "\" failed" << endl;
+ (__ref4)->action = 0;
}
-#line 5082 "rlparse.cpp"
+#line 5514 "rlparse.cpp"
} break;
case 153: {
+Token *__ref0 = (Token*)&rhs[0]->user.token;
+Parser_Lel_inline_list *__ref1 = (Parser_Lel_inline_list*)&rhs[1]->user.inline_list;
+Parser_Lel_action_ref *__ref2 = (Parser_Lel_action_ref*)&redLel->user.action_ref;
#line 788 "rlparse.kl"
/* Create the action, add it to the list and pass up. */
- Action *newAction = new Action( (&rhs[0]->user.token)->loc, 0, (&rhs[1]->user.inline_list)->inlineList, pd->nextCondId++ );
+ Action *newAction = new Action( (__ref0)->loc, 0, (__ref1)->inlineList, pd->nextCondId++ );
pd->actionList.append( newAction );
- (&redLel->user.action_ref)->action = newAction;
+ (__ref2)->action = newAction;
-#line 5093 "rlparse.cpp"
+#line 5528 "rlparse.cpp"
} break;
case 154: {
+Token *__ref0 = (Token*)&rhs[0]->user.token;
+Parser_Lel_priority_name *__ref1 = (Parser_Lel_priority_name*)&redLel->user.priority_name;
#line 803 "rlparse.kl"
// Lookup/create the priority key.
PriorDictEl *priorDictEl;
- if ( pd->priorDict.insert( (&rhs[0]->user.token)->data, pd->nextPriorKey, &priorDictEl ) )
+ if ( pd->priorDict.insert( (__ref0)->data, pd->nextPriorKey, &priorDictEl ) )
pd->nextPriorKey += 1;
// Use the inserted/found priority key.
- (&redLel->user.priority_name)->priorityName = priorDictEl->value;
+ (__ref1)->priorityName = priorDictEl->value;
-#line 5107 "rlparse.cpp"
+#line 5544 "rlparse.cpp"
} break;
case 155: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&rhs[0]->user.token_type;
+Parser_Lel_token_type *__ref1 = (Parser_Lel_token_type*)&rhs[0]->user.token_type;
+Parser_Lel_token_type *__ref2 = (Parser_Lel_token_type*)&rhs[0]->user.token_type;
+Parser_Lel_priority_aug *__ref3 = (Parser_Lel_priority_aug*)&redLel->user.priority_aug;
+Parser_Lel_token_type *__ref4 = (Parser_Lel_token_type*)&rhs[0]->user.token_type;
+Parser_Lel_token_type *__ref5 = (Parser_Lel_token_type*)&rhs[0]->user.token_type;
+Parser_Lel_priority_aug *__ref6 = (Parser_Lel_priority_aug*)&redLel->user.priority_aug;
+Parser_Lel_priority_aug *__ref7 = (Parser_Lel_priority_aug*)&redLel->user.priority_aug;
#line 820 "rlparse.kl"
// Convert the priority number to a long. Check for overflow.
errno = 0;
//cerr << "PRIOR AUG: " << $1->token.data << endl;
- long aug = strtol( (&rhs[0]->user.token_type)->token.data, 0, 10 );
+ long aug = strtol( (__ref0)->token.data, 0, 10 );
if ( errno == ERANGE && aug == LONG_MAX ) {
/* Priority number too large. Recover by setting the priority to 0. */
- error((&rhs[0]->user.token_type)->token.loc) << "priority number " << (&rhs[0]->user.token_type)->token.data <<
+ error((__ref1)->token.loc) << "priority number " << (__ref2)->token.data <<
" overflows" << endl;
- (&redLel->user.priority_aug)->priorityNum = 0;
+ (__ref3)->priorityNum = 0;
}
else if ( errno == ERANGE && aug == LONG_MIN ) {
/* Priority number too large in the neg. Recover by using 0. */
- error((&rhs[0]->user.token_type)->token.loc) << "priority number " << (&rhs[0]->user.token_type)->token.data <<
+ error((__ref4)->token.loc) << "priority number " << (__ref5)->token.data <<
" underflows" << endl;
- (&redLel->user.priority_aug)->priorityNum = 0;
+ (__ref6)->priorityNum = 0;
}
else {
/* No overflow or underflow. */
- (&redLel->user.priority_aug)->priorityNum = aug;
+ (__ref7)->priorityNum = aug;
}
-#line 5134 "rlparse.cpp"
+#line 5579 "rlparse.cpp"
} break;
case 156: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 846 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 5142 "rlparse.cpp"
+#line 5589 "rlparse.cpp"
} break;
case 157: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Parser_Lel_token_type *__ref1 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref2 = (Token*)&rhs[0]->user.token;
+Parser_Lel_token_type *__ref3 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref4 = (Token*)&rhs[1]->user.token;
#line 850 "rlparse.kl"
- (&redLel->user.token_type)->token.set( "+", 1 );
- (&redLel->user.token_type)->token.loc = (&rhs[0]->user.token)->loc;
- (&redLel->user.token_type)->token.append( *(&rhs[1]->user.token) );
+ (__ref0)->token.set( "+", 1 );
+ (__ref1)->token.loc = (__ref2)->loc;
+ (__ref3)->token.append( *(__ref4) );
-#line 5152 "rlparse.cpp"
+#line 5604 "rlparse.cpp"
} break;
case 158: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Parser_Lel_token_type *__ref1 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref2 = (Token*)&rhs[0]->user.token;
+Parser_Lel_token_type *__ref3 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref4 = (Token*)&rhs[1]->user.token;
#line 856 "rlparse.kl"
- (&redLel->user.token_type)->token.set( "-", 1 );
- (&redLel->user.token_type)->token.loc = (&rhs[0]->user.token)->loc;
- (&redLel->user.token_type)->token.append( *(&rhs[1]->user.token) );
+ (__ref0)->token.set( "-", 1 );
+ (__ref1)->token.loc = (__ref2)->loc;
+ (__ref3)->token.append( *(__ref4) );
-#line 5162 "rlparse.cpp"
+#line 5619 "rlparse.cpp"
} break;
case 159: {
+Token *__ref0 = (Token*)&rhs[0]->user.token;
+Parser_Lel_local_err_name *__ref1 = (Parser_Lel_local_err_name*)&redLel->user.local_err_name;
#line 868 "rlparse.kl"
/* Lookup/create the priority key. */
LocalErrDictEl *localErrDictEl;
- if ( pd->localErrDict.insert( (&rhs[0]->user.token)->data, pd->nextLocalErrKey, &localErrDictEl ) )
+ if ( pd->localErrDict.insert( (__ref0)->data, pd->nextLocalErrKey, &localErrDictEl ) )
pd->nextLocalErrKey += 1;
/* Use the inserted/found priority key. */
- (&redLel->user.local_err_name)->error_name = localErrDictEl->value;
+ (__ref1)->error_name = localErrDictEl->value;
-#line 5176 "rlparse.cpp"
+#line 5635 "rlparse.cpp"
} break;
case 160: {
+Parser_Lel_factor_with_rep *__ref0 = (Parser_Lel_factor_with_rep*)&redLel->user.factor_with_rep;
+Token *__ref1 = (Token*)&rhs[1]->user.token;
+Parser_Lel_factor_with_rep *__ref2 = (Parser_Lel_factor_with_rep*)&rhs[0]->user.factor_with_rep;
#line 889 "rlparse.kl"
- (&redLel->user.factor_with_rep)->factorWithRep = new FactorWithRep( (&rhs[1]->user.token)->loc, (&rhs[0]->user.factor_with_rep)->factorWithRep,
+ (__ref0)->factorWithRep = new FactorWithRep( (__ref1)->loc, (__ref2)->factorWithRep,
0, 0, FactorWithRep::StarType );
-#line 5185 "rlparse.cpp"
+#line 5647 "rlparse.cpp"
} break;
case 161: {
+Parser_Lel_factor_with_rep *__ref0 = (Parser_Lel_factor_with_rep*)&redLel->user.factor_with_rep;
+Token *__ref1 = (Token*)&rhs[1]->user.token;
+Parser_Lel_factor_with_rep *__ref2 = (Parser_Lel_factor_with_rep*)&rhs[0]->user.factor_with_rep;
#line 894 "rlparse.kl"
- (&redLel->user.factor_with_rep)->factorWithRep = new FactorWithRep( (&rhs[1]->user.token)->loc, (&rhs[0]->user.factor_with_rep)->factorWithRep,
+ (__ref0)->factorWithRep = new FactorWithRep( (__ref1)->loc, (__ref2)->factorWithRep,
0, 0, FactorWithRep::StarStarType );
-#line 5194 "rlparse.cpp"
+#line 5659 "rlparse.cpp"
} break;
case 162: {
+Parser_Lel_factor_with_rep *__ref0 = (Parser_Lel_factor_with_rep*)&redLel->user.factor_with_rep;
+Token *__ref1 = (Token*)&rhs[1]->user.token;
+Parser_Lel_factor_with_rep *__ref2 = (Parser_Lel_factor_with_rep*)&rhs[0]->user.factor_with_rep;
#line 899 "rlparse.kl"
- (&redLel->user.factor_with_rep)->factorWithRep = new FactorWithRep( (&rhs[1]->user.token)->loc, (&rhs[0]->user.factor_with_rep)->factorWithRep,
+ (__ref0)->factorWithRep = new FactorWithRep( (__ref1)->loc, (__ref2)->factorWithRep,
0, 0, FactorWithRep::OptionalType );
-#line 5203 "rlparse.cpp"
+#line 5671 "rlparse.cpp"
} break;
case 163: {
+Parser_Lel_factor_with_rep *__ref0 = (Parser_Lel_factor_with_rep*)&redLel->user.factor_with_rep;
+Token *__ref1 = (Token*)&rhs[1]->user.token;
+Parser_Lel_factor_with_rep *__ref2 = (Parser_Lel_factor_with_rep*)&rhs[0]->user.factor_with_rep;
#line 904 "rlparse.kl"
- (&redLel->user.factor_with_rep)->factorWithRep = new FactorWithRep( (&rhs[1]->user.token)->loc, (&rhs[0]->user.factor_with_rep)->factorWithRep,
+ (__ref0)->factorWithRep = new FactorWithRep( (__ref1)->loc, (__ref2)->factorWithRep,
0, 0, FactorWithRep::PlusType );
-#line 5212 "rlparse.cpp"
+#line 5683 "rlparse.cpp"
} break;
case 164: {
+Parser_Lel_factor_with_rep *__ref0 = (Parser_Lel_factor_with_rep*)&redLel->user.factor_with_rep;
+Token *__ref1 = (Token*)&rhs[1]->user.token;
+Parser_Lel_factor_with_rep *__ref2 = (Parser_Lel_factor_with_rep*)&rhs[0]->user.factor_with_rep;
+Parser_Lel_factor_rep_num *__ref3 = (Parser_Lel_factor_rep_num*)&rhs[2]->user.factor_rep_num;
#line 909 "rlparse.kl"
- (&redLel->user.factor_with_rep)->factorWithRep = new FactorWithRep( (&rhs[1]->user.token)->loc, (&rhs[0]->user.factor_with_rep)->factorWithRep,
- (&rhs[2]->user.factor_rep_num)->rep, 0, FactorWithRep::ExactType );
+ (__ref0)->factorWithRep = new FactorWithRep( (__ref1)->loc, (__ref2)->factorWithRep,
+ (__ref3)->rep, 0, FactorWithRep::ExactType );
-#line 5221 "rlparse.cpp"
+#line 5696 "rlparse.cpp"
} break;
case 165: {
+Parser_Lel_factor_with_rep *__ref0 = (Parser_Lel_factor_with_rep*)&redLel->user.factor_with_rep;
+Token *__ref1 = (Token*)&rhs[1]->user.token;
+Parser_Lel_factor_with_rep *__ref2 = (Parser_Lel_factor_with_rep*)&rhs[0]->user.factor_with_rep;
+Parser_Lel_factor_rep_num *__ref3 = (Parser_Lel_factor_rep_num*)&rhs[3]->user.factor_rep_num;
#line 914 "rlparse.kl"
- (&redLel->user.factor_with_rep)->factorWithRep = new FactorWithRep( (&rhs[1]->user.token)->loc, (&rhs[0]->user.factor_with_rep)->factorWithRep,
- 0, (&rhs[3]->user.factor_rep_num)->rep, FactorWithRep::MaxType );
+ (__ref0)->factorWithRep = new FactorWithRep( (__ref1)->loc, (__ref2)->factorWithRep,
+ 0, (__ref3)->rep, FactorWithRep::MaxType );
-#line 5230 "rlparse.cpp"
+#line 5709 "rlparse.cpp"
} break;
case 166: {
+Parser_Lel_factor_with_rep *__ref0 = (Parser_Lel_factor_with_rep*)&redLel->user.factor_with_rep;
+Token *__ref1 = (Token*)&rhs[1]->user.token;
+Parser_Lel_factor_with_rep *__ref2 = (Parser_Lel_factor_with_rep*)&rhs[0]->user.factor_with_rep;
+Parser_Lel_factor_rep_num *__ref3 = (Parser_Lel_factor_rep_num*)&rhs[2]->user.factor_rep_num;
#line 919 "rlparse.kl"
- (&redLel->user.factor_with_rep)->factorWithRep = new FactorWithRep( (&rhs[1]->user.token)->loc, (&rhs[0]->user.factor_with_rep)->factorWithRep,
- (&rhs[2]->user.factor_rep_num)->rep, 0, FactorWithRep::MinType );
+ (__ref0)->factorWithRep = new FactorWithRep( (__ref1)->loc, (__ref2)->factorWithRep,
+ (__ref3)->rep, 0, FactorWithRep::MinType );
-#line 5239 "rlparse.cpp"
+#line 5722 "rlparse.cpp"
} break;
case 167: {
+Parser_Lel_factor_with_rep *__ref0 = (Parser_Lel_factor_with_rep*)&redLel->user.factor_with_rep;
+Token *__ref1 = (Token*)&rhs[1]->user.token;
+Parser_Lel_factor_with_rep *__ref2 = (Parser_Lel_factor_with_rep*)&rhs[0]->user.factor_with_rep;
+Parser_Lel_factor_rep_num *__ref3 = (Parser_Lel_factor_rep_num*)&rhs[2]->user.factor_rep_num;
+Parser_Lel_factor_rep_num *__ref4 = (Parser_Lel_factor_rep_num*)&rhs[4]->user.factor_rep_num;
#line 924 "rlparse.kl"
- (&redLel->user.factor_with_rep)->factorWithRep = new FactorWithRep( (&rhs[1]->user.token)->loc, (&rhs[0]->user.factor_with_rep)->factorWithRep,
- (&rhs[2]->user.factor_rep_num)->rep, (&rhs[4]->user.factor_rep_num)->rep, FactorWithRep::RangeType );
+ (__ref0)->factorWithRep = new FactorWithRep( (__ref1)->loc, (__ref2)->factorWithRep,
+ (__ref3)->rep, (__ref4)->rep, FactorWithRep::RangeType );
-#line 5248 "rlparse.cpp"
+#line 5736 "rlparse.cpp"
} break;
case 168: {
+Parser_Lel_factor_with_rep *__ref0 = (Parser_Lel_factor_with_rep*)&redLel->user.factor_with_rep;
+Parser_Lel_factor_with_neg *__ref1 = (Parser_Lel_factor_with_neg*)&rhs[0]->user.factor_with_neg;
#line 929 "rlparse.kl"
- (&redLel->user.factor_with_rep)->factorWithRep = new FactorWithRep( (&rhs[0]->user.factor_with_neg)->factorWithNeg );
+ (__ref0)->factorWithRep = new FactorWithRep( (__ref1)->factorWithNeg );
-#line 5256 "rlparse.cpp"
+#line 5746 "rlparse.cpp"
} break;
case 169: {
+Token *__ref0 = (Token*)&rhs[0]->user.token;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Token *__ref2 = (Token*)&rhs[0]->user.token;
+Parser_Lel_factor_rep_num *__ref3 = (Parser_Lel_factor_rep_num*)&redLel->user.factor_rep_num;
+Parser_Lel_factor_rep_num *__ref4 = (Parser_Lel_factor_rep_num*)&redLel->user.factor_rep_num;
#line 939 "rlparse.kl"
// Convert the priority number to a long. Check for overflow.
errno = 0;
- long rep = strtol( (&rhs[0]->user.token)->data, 0, 10 );
+ long rep = strtol( (__ref0)->data, 0, 10 );
if ( errno == ERANGE && rep == LONG_MAX ) {
// Repetition too large. Recover by returing repetition 1. */
- error((&rhs[0]->user.token)->loc) << "repetition number " << (&rhs[0]->user.token)->data << " overflows" << endl;
- (&redLel->user.factor_rep_num)->rep = 1;
+ error((__ref1)->loc) << "repetition number " << (__ref2)->data << " overflows" << endl;
+ (__ref3)->rep = 1;
}
else {
// Cannot be negative, so no overflow.
- (&redLel->user.factor_rep_num)->rep = rep;
+ (__ref4)->rep = rep;
}
-#line 5275 "rlparse.cpp"
+#line 5770 "rlparse.cpp"
} break;
case 170: {
+Parser_Lel_factor_with_neg *__ref0 = (Parser_Lel_factor_with_neg*)&redLel->user.factor_with_neg;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_factor_with_neg *__ref2 = (Parser_Lel_factor_with_neg*)&rhs[1]->user.factor_with_neg;
#line 965 "rlparse.kl"
- (&redLel->user.factor_with_neg)->factorWithNeg = new FactorWithNeg( (&rhs[0]->user.token)->loc,
- (&rhs[1]->user.factor_with_neg)->factorWithNeg, FactorWithNeg::NegateType );
+ (__ref0)->factorWithNeg = new FactorWithNeg( (__ref1)->loc,
+ (__ref2)->factorWithNeg, FactorWithNeg::NegateType );
-#line 5284 "rlparse.cpp"
+#line 5782 "rlparse.cpp"
} break;
case 171: {
+Parser_Lel_factor_with_neg *__ref0 = (Parser_Lel_factor_with_neg*)&redLel->user.factor_with_neg;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_factor_with_neg *__ref2 = (Parser_Lel_factor_with_neg*)&rhs[1]->user.factor_with_neg;
#line 970 "rlparse.kl"
- (&redLel->user.factor_with_neg)->factorWithNeg = new FactorWithNeg( (&rhs[0]->user.token)->loc,
- (&rhs[1]->user.factor_with_neg)->factorWithNeg, FactorWithNeg::CharNegateType );
+ (__ref0)->factorWithNeg = new FactorWithNeg( (__ref1)->loc,
+ (__ref2)->factorWithNeg, FactorWithNeg::CharNegateType );
-#line 5293 "rlparse.cpp"
+#line 5794 "rlparse.cpp"
} break;
case 172: {
+Parser_Lel_factor_with_neg *__ref0 = (Parser_Lel_factor_with_neg*)&redLel->user.factor_with_neg;
+Parser_Lel_factor *__ref1 = (Parser_Lel_factor*)&rhs[0]->user.factor;
#line 975 "rlparse.kl"
- (&redLel->user.factor_with_neg)->factorWithNeg = new FactorWithNeg( (&rhs[0]->user.factor)->factor );
+ (__ref0)->factorWithNeg = new FactorWithNeg( (__ref1)->factor );
-#line 5301 "rlparse.cpp"
+#line 5804 "rlparse.cpp"
} break;
case 173: {
+Parser_Lel_factor *__ref0 = (Parser_Lel_factor*)&redLel->user.factor;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 985 "rlparse.kl"
/* Create a new factor node going to a concat literal. */
- (&redLel->user.factor)->factor = new Factor( new Literal( *(&rhs[0]->user.token), Literal::LitString ) );
+ (__ref0)->factor = new Factor( new Literal( *(__ref1), Literal::LitString ) );
-#line 5310 "rlparse.cpp"
+#line 5815 "rlparse.cpp"
} break;
case 174: {
+Parser_Lel_factor *__ref0 = (Parser_Lel_factor*)&redLel->user.factor;
+Parser_Lel_token_type *__ref1 = (Parser_Lel_token_type*)&rhs[0]->user.token_type;
#line 990 "rlparse.kl"
/* Create a new factor node going to a literal number. */
- (&redLel->user.factor)->factor = new Factor( new Literal( (&rhs[0]->user.token_type)->token, Literal::Number ) );
+ (__ref0)->factor = new Factor( new Literal( (__ref1)->token, Literal::Number ) );
-#line 5319 "rlparse.cpp"
+#line 5826 "rlparse.cpp"
} break;
case 175: {
+Token *__ref0 = (Token*)&rhs[0]->user.token;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Token *__ref2 = (Token*)&rhs[0]->user.token;
+Parser_Lel_factor *__ref3 = (Parser_Lel_factor*)&redLel->user.factor;
+Token *__ref4 = (Token*)&rhs[0]->user.token;
+Parser_Lel_factor *__ref5 = (Parser_Lel_factor*)&redLel->user.factor;
+Parser_Lel_factor *__ref6 = (Parser_Lel_factor*)&redLel->user.factor;
+Token *__ref7 = (Token*)&rhs[0]->user.token;
#line 995 "rlparse.kl"
/* Find the named graph. */
- GraphDictEl *gdNode = pd->graphDict.find( (&rhs[0]->user.token)->data );
+ GraphDictEl *gdNode = pd->graphDict.find( (__ref0)->data );
if ( gdNode == 0 ) {
/* Recover by returning null as the factor node. */
- error((&rhs[0]->user.token)->loc) << "graph lookup of \"" << (&rhs[0]->user.token)->data << "\" failed" << endl;
- (&redLel->user.factor)->factor = 0;
+ error((__ref1)->loc) << "graph lookup of \"" << (__ref2)->data << "\" failed" << endl;
+ (__ref3)->factor = 0;
}
else if ( gdNode->isInstance ) {
/* Recover by retuning null as the factor node. */
- error((&rhs[0]->user.token)->loc) << "references to graph instantiations not allowed "
+ error((__ref4)->loc) << "references to graph instantiations not allowed "
"in expressions" << endl;
- (&redLel->user.factor)->factor = 0;
+ (__ref5)->factor = 0;
}
else {
/* Create a factor node that is a lookup of an expression. */
- (&redLel->user.factor)->factor = new Factor( (&rhs[0]->user.token)->loc, gdNode->value );
+ (__ref6)->factor = new Factor( (__ref7)->loc, gdNode->value );
}
-#line 5343 "rlparse.cpp"
+#line 5858 "rlparse.cpp"
} break;
case 176: {
+Parser_Lel_factor *__ref0 = (Parser_Lel_factor*)&redLel->user.factor;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_regular_expr_or_data *__ref2 = (Parser_Lel_regular_expr_or_data*)&rhs[1]->user.regular_expr_or_data;
#line 1015 "rlparse.kl"
/* Create a new factor node going to an OR expression. */
- (&redLel->user.factor)->factor = new Factor( new ReItem( (&rhs[0]->user.token)->loc, (&rhs[1]->user.regular_expr_or_data)->reOrBlock, ReItem::OrBlock ) );
+ (__ref0)->factor = new Factor( new ReItem( (__ref1)->loc, (__ref2)->reOrBlock, ReItem::OrBlock ) );
-#line 5352 "rlparse.cpp"
+#line 5870 "rlparse.cpp"
} break;
case 177: {
+Parser_Lel_factor *__ref0 = (Parser_Lel_factor*)&redLel->user.factor;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_regular_expr_or_data *__ref2 = (Parser_Lel_regular_expr_or_data*)&rhs[1]->user.regular_expr_or_data;
#line 1020 "rlparse.kl"
/* Create a new factor node going to a negated OR expression. */
- (&redLel->user.factor)->factor = new Factor( new ReItem( (&rhs[0]->user.token)->loc, (&rhs[1]->user.regular_expr_or_data)->reOrBlock, ReItem::NegOrBlock ) );
+ (__ref0)->factor = new Factor( new ReItem( (__ref1)->loc, (__ref2)->reOrBlock, ReItem::NegOrBlock ) );
-#line 5361 "rlparse.cpp"
+#line 5882 "rlparse.cpp"
} break;
case 178: {
+Token *__ref0 = (Token*)&rhs[2]->user.token;
+Token *__ref1 = (Token*)&rhs[2]->user.token;
+Parser_Lel_regular_expr *__ref2 = (Parser_Lel_regular_expr*)&rhs[1]->user.regular_expr;
+Parser_Lel_factor *__ref3 = (Parser_Lel_factor*)&redLel->user.factor;
+Parser_Lel_regular_expr *__ref4 = (Parser_Lel_regular_expr*)&rhs[1]->user.regular_expr;
#line 1025 "rlparse.kl"
- if ( (&rhs[2]->user.token)->length > 1 ) {
- for ( char *p = (&rhs[2]->user.token)->data; *p != 0; p++ ) {
+ if ( (__ref0)->length > 1 ) {
+ for ( char *p = (__ref1)->data; *p != 0; p++ ) {
if ( *p == 'i' )
- (&rhs[1]->user.regular_expr)->regExpr->caseInsensitive = true;
+ (__ref2)->regExpr->caseInsensitive = true;
}
}
/* Create a new factor node going to a regular exp. */
- (&redLel->user.factor)->factor = new Factor( (&rhs[1]->user.regular_expr)->regExpr );
+ (__ref3)->factor = new Factor( (__ref4)->regExpr );
-#line 5377 "rlparse.cpp"
+#line 5903 "rlparse.cpp"
} break;
case 179: {
+Parser_Lel_factor *__ref0 = (Parser_Lel_factor*)&redLel->user.factor;
+Parser_Lel_range_lit *__ref1 = (Parser_Lel_range_lit*)&rhs[0]->user.range_lit;
+Parser_Lel_range_lit *__ref2 = (Parser_Lel_range_lit*)&rhs[2]->user.range_lit;
#line 1037 "rlparse.kl"
/* Create a new factor node going to a range. */
- (&redLel->user.factor)->factor = new Factor( new Range( (&rhs[0]->user.range_lit)->literal, (&rhs[2]->user.range_lit)->literal ) );
+ (__ref0)->factor = new Factor( new Range( (__ref1)->literal, (__ref2)->literal ) );
-#line 5386 "rlparse.cpp"
+#line 5915 "rlparse.cpp"
} break;
case 180: {
+Parser_Lel_factor *__ref0 = (Parser_Lel_factor*)&redLel->user.factor;
+Parser_Lel_join *__ref1 = (Parser_Lel_join*)&rhs[1]->user.join;
+Parser_Lel_join *__ref2 = (Parser_Lel_join*)&rhs[1]->user.join;
+Token *__ref3 = (Token*)&rhs[0]->user.token;
#line 1042 "rlparse.kl"
/* Create a new factor going to a parenthesized join. */
- (&redLel->user.factor)->factor = new Factor( (&rhs[1]->user.join)->join );
- (&rhs[1]->user.join)->join->loc = (&rhs[0]->user.token)->loc;
+ (__ref0)->factor = new Factor( (__ref1)->join );
+ (__ref2)->join->loc = (__ref3)->loc;
-#line 5396 "rlparse.cpp"
+#line 5929 "rlparse.cpp"
} break;
case 181: {
+Parser_Lel_range_lit *__ref0 = (Parser_Lel_range_lit*)&redLel->user.range_lit;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1055 "rlparse.kl"
/* Range literas must have only one char. We restrict this in the parse tree. */
- (&redLel->user.range_lit)->literal = new Literal( *(&rhs[0]->user.token), Literal::LitString );
+ (__ref0)->literal = new Literal( *(__ref1), Literal::LitString );
-#line 5405 "rlparse.cpp"
+#line 5940 "rlparse.cpp"
} break;
case 182: {
+Parser_Lel_range_lit *__ref0 = (Parser_Lel_range_lit*)&redLel->user.range_lit;
+Parser_Lel_token_type *__ref1 = (Parser_Lel_token_type*)&rhs[0]->user.token_type;
#line 1060 "rlparse.kl"
/* Create a new literal number. */
- (&redLel->user.range_lit)->literal = new Literal( (&rhs[0]->user.token_type)->token, Literal::Number );
+ (__ref0)->literal = new Literal( (__ref1)->token, Literal::Number );
-#line 5414 "rlparse.cpp"
+#line 5951 "rlparse.cpp"
} break;
case 183: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1069 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 5422 "rlparse.cpp"
+#line 5961 "rlparse.cpp"
} break;
case 184: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Parser_Lel_token_type *__ref1 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref2 = (Token*)&rhs[0]->user.token;
+Parser_Lel_token_type *__ref3 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref4 = (Token*)&rhs[1]->user.token;
#line 1073 "rlparse.kl"
- (&redLel->user.token_type)->token.set( "-", 1 );
- (&redLel->user.token_type)->token.loc = (&rhs[0]->user.token)->loc;
- (&redLel->user.token_type)->token.append( *(&rhs[1]->user.token) );
+ (__ref0)->token.set( "-", 1 );
+ (__ref1)->token.loc = (__ref2)->loc;
+ (__ref3)->token.append( *(__ref4) );
-#line 5432 "rlparse.cpp"
+#line 5976 "rlparse.cpp"
} break;
case 185: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1079 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 5440 "rlparse.cpp"
+#line 5986 "rlparse.cpp"
} break;
case 186: {
+Parser_Lel_regular_expr_item *__ref0 = (Parser_Lel_regular_expr_item*)&rhs[1]->user.regular_expr_item;
+Parser_Lel_regular_expr_item *__ref1 = (Parser_Lel_regular_expr_item*)&rhs[1]->user.regular_expr_item;
+Parser_Lel_regular_expr *__ref2 = (Parser_Lel_regular_expr*)&rhs[0]->user.regular_expr;
+Parser_Lel_regular_expr *__ref3 = (Parser_Lel_regular_expr*)&rhs[0]->user.regular_expr;
+Parser_Lel_regular_expr *__ref4 = (Parser_Lel_regular_expr*)&rhs[0]->user.regular_expr;
+Parser_Lel_regular_expr *__ref5 = (Parser_Lel_regular_expr*)&rhs[0]->user.regular_expr;
+Parser_Lel_regular_expr_item *__ref6 = (Parser_Lel_regular_expr_item*)&rhs[1]->user.regular_expr_item;
+Parser_Lel_regular_expr_item *__ref7 = (Parser_Lel_regular_expr_item*)&rhs[1]->user.regular_expr_item;
+Parser_Lel_regular_expr *__ref8 = (Parser_Lel_regular_expr*)&redLel->user.regular_expr;
+Parser_Lel_regular_expr *__ref9 = (Parser_Lel_regular_expr*)&rhs[0]->user.regular_expr;
+Parser_Lel_regular_expr *__ref10 = (Parser_Lel_regular_expr*)&redLel->user.regular_expr;
+Parser_Lel_regular_expr *__ref11 = (Parser_Lel_regular_expr*)&rhs[0]->user.regular_expr;
+Parser_Lel_regular_expr_item *__ref12 = (Parser_Lel_regular_expr_item*)&rhs[1]->user.regular_expr_item;
#line 1094 "rlparse.kl"
/* An optimization to lessen the tree size. If a non-starred char is
* directly under the left side on the right and the right side is
* another non-starred char then paste them together and return the
* left side. Otherwise just put the two under a new reg exp node. */
- if ( (&rhs[1]->user.regular_expr_item)->reItem->type == ReItem::Data && !(&rhs[1]->user.regular_expr_item)->reItem->star &&
- (&rhs[0]->user.regular_expr)->regExpr->type == RegExpr::RecurseItem &&
- (&rhs[0]->user.regular_expr)->regExpr->item->type == ReItem::Data && !(&rhs[0]->user.regular_expr)->regExpr->item->star )
+ if ( (__ref0)->reItem->type == ReItem::Data && !(__ref1)->reItem->star &&
+ (__ref2)->regExpr->type == RegExpr::RecurseItem &&
+ (__ref3)->regExpr->item->type == ReItem::Data && !(__ref4)->regExpr->item->star )
{
/* Append the right side to the right side of the left and toss the
* right side. */
- (&rhs[0]->user.regular_expr)->regExpr->item->token.append( (&rhs[1]->user.regular_expr_item)->reItem->token );
- delete (&rhs[1]->user.regular_expr_item)->reItem;
- (&redLel->user.regular_expr)->regExpr = (&rhs[0]->user.regular_expr)->regExpr;
+ (__ref5)->regExpr->item->token.append( (__ref6)->reItem->token );
+ delete (__ref7)->reItem;
+ (__ref8)->regExpr = (__ref9)->regExpr;
}
else {
- (&redLel->user.regular_expr)->regExpr = new RegExpr( (&rhs[0]->user.regular_expr)->regExpr, (&rhs[1]->user.regular_expr_item)->reItem );
+ (__ref10)->regExpr = new RegExpr( (__ref11)->regExpr, (__ref12)->reItem );
}
-#line 5464 "rlparse.cpp"
+#line 6023 "rlparse.cpp"
} break;
case 187: {
+Parser_Lel_regular_expr *__ref0 = (Parser_Lel_regular_expr*)&redLel->user.regular_expr;
#line 1114 "rlparse.kl"
/* Can't optimize the tree. */
- (&redLel->user.regular_expr)->regExpr = new RegExpr();
+ (__ref0)->regExpr = new RegExpr();
-#line 5473 "rlparse.cpp"
+#line 6033 "rlparse.cpp"
} break;
case 188: {
+Parser_Lel_regular_expr_char *__ref0 = (Parser_Lel_regular_expr_char*)&rhs[0]->user.regular_expr_char;
+Parser_Lel_regular_expr_item *__ref1 = (Parser_Lel_regular_expr_item*)&redLel->user.regular_expr_item;
+Parser_Lel_regular_expr_char *__ref2 = (Parser_Lel_regular_expr_char*)&rhs[0]->user.regular_expr_char;
#line 1126 "rlparse.kl"
- (&rhs[0]->user.regular_expr_char)->reItem->star = true;
- (&redLel->user.regular_expr_item)->reItem = (&rhs[0]->user.regular_expr_char)->reItem;
+ (__ref0)->reItem->star = true;
+ (__ref1)->reItem = (__ref2)->reItem;
-#line 5482 "rlparse.cpp"
+#line 6045 "rlparse.cpp"
} break;
case 189: {
+Parser_Lel_regular_expr_item *__ref0 = (Parser_Lel_regular_expr_item*)&redLel->user.regular_expr_item;
+Parser_Lel_regular_expr_char *__ref1 = (Parser_Lel_regular_expr_char*)&rhs[0]->user.regular_expr_char;
#line 1131 "rlparse.kl"
- (&redLel->user.regular_expr_item)->reItem = (&rhs[0]->user.regular_expr_char)->reItem;
+ (__ref0)->reItem = (__ref1)->reItem;
-#line 5490 "rlparse.cpp"
+#line 6055 "rlparse.cpp"
} break;
case 190: {
+Parser_Lel_regular_expr_char *__ref0 = (Parser_Lel_regular_expr_char*)&redLel->user.regular_expr_char;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_regular_expr_or_data *__ref2 = (Parser_Lel_regular_expr_or_data*)&rhs[1]->user.regular_expr_or_data;
#line 1143 "rlparse.kl"
- (&redLel->user.regular_expr_char)->reItem = new ReItem( (&rhs[0]->user.token)->loc, (&rhs[1]->user.regular_expr_or_data)->reOrBlock, ReItem::OrBlock );
+ (__ref0)->reItem = new ReItem( (__ref1)->loc, (__ref2)->reOrBlock, ReItem::OrBlock );
-#line 5498 "rlparse.cpp"
+#line 6066 "rlparse.cpp"
} break;
case 191: {
+Parser_Lel_regular_expr_char *__ref0 = (Parser_Lel_regular_expr_char*)&redLel->user.regular_expr_char;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_regular_expr_or_data *__ref2 = (Parser_Lel_regular_expr_or_data*)&rhs[1]->user.regular_expr_or_data;
#line 1147 "rlparse.kl"
- (&redLel->user.regular_expr_char)->reItem = new ReItem( (&rhs[0]->user.token)->loc, (&rhs[1]->user.regular_expr_or_data)->reOrBlock, ReItem::NegOrBlock );
+ (__ref0)->reItem = new ReItem( (__ref1)->loc, (__ref2)->reOrBlock, ReItem::NegOrBlock );
-#line 5506 "rlparse.cpp"
+#line 6077 "rlparse.cpp"
} break;
case 192: {
+Parser_Lel_regular_expr_char *__ref0 = (Parser_Lel_regular_expr_char*)&redLel->user.regular_expr_char;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1151 "rlparse.kl"
- (&redLel->user.regular_expr_char)->reItem = new ReItem( (&rhs[0]->user.token)->loc, ReItem::Dot );
+ (__ref0)->reItem = new ReItem( (__ref1)->loc, ReItem::Dot );
-#line 5514 "rlparse.cpp"
+#line 6087 "rlparse.cpp"
} break;
case 193: {
+Parser_Lel_regular_expr_char *__ref0 = (Parser_Lel_regular_expr_char*)&redLel->user.regular_expr_char;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Token *__ref2 = (Token*)&rhs[0]->user.token;
#line 1155 "rlparse.kl"
- (&redLel->user.regular_expr_char)->reItem = new ReItem( (&rhs[0]->user.token)->loc, *(&rhs[0]->user.token) );
+ (__ref0)->reItem = new ReItem( (__ref1)->loc, *(__ref2) );
-#line 5522 "rlparse.cpp"
+#line 6098 "rlparse.cpp"
} break;
case 194: {
+Parser_Lel_regular_expr_or_char *__ref0 = (Parser_Lel_regular_expr_or_char*)&rhs[1]->user.regular_expr_or_char;
+Parser_Lel_regular_expr_or_data *__ref1 = (Parser_Lel_regular_expr_or_data*)&rhs[0]->user.regular_expr_or_data;
+Parser_Lel_regular_expr_or_data *__ref2 = (Parser_Lel_regular_expr_or_data*)&rhs[0]->user.regular_expr_or_data;
+Parser_Lel_regular_expr_or_data *__ref3 = (Parser_Lel_regular_expr_or_data*)&rhs[0]->user.regular_expr_or_data;
+Parser_Lel_regular_expr_or_char *__ref4 = (Parser_Lel_regular_expr_or_char*)&rhs[1]->user.regular_expr_or_char;
+Parser_Lel_regular_expr_or_char *__ref5 = (Parser_Lel_regular_expr_or_char*)&rhs[1]->user.regular_expr_or_char;
+Parser_Lel_regular_expr_or_data *__ref6 = (Parser_Lel_regular_expr_or_data*)&redLel->user.regular_expr_or_data;
+Parser_Lel_regular_expr_or_data *__ref7 = (Parser_Lel_regular_expr_or_data*)&rhs[0]->user.regular_expr_or_data;
+Parser_Lel_regular_expr_or_data *__ref8 = (Parser_Lel_regular_expr_or_data*)&redLel->user.regular_expr_or_data;
+Parser_Lel_regular_expr_or_data *__ref9 = (Parser_Lel_regular_expr_or_data*)&rhs[0]->user.regular_expr_or_data;
+Parser_Lel_regular_expr_or_char *__ref10 = (Parser_Lel_regular_expr_or_char*)&rhs[1]->user.regular_expr_or_char;
#line 1167 "rlparse.kl"
/* An optimization to lessen the tree size. If an or char is directly
* under the left side on the right and the right side is another or
* char then paste them together and return the left side. Otherwise
* just put the two under a new or data node. */
- if ( (&rhs[1]->user.regular_expr_or_char)->reOrItem->type == ReOrItem::Data &&
- (&rhs[0]->user.regular_expr_or_data)->reOrBlock->type == ReOrBlock::RecurseItem &&
- (&rhs[0]->user.regular_expr_or_data)->reOrBlock->item->type == ReOrItem::Data )
+ if ( (__ref0)->reOrItem->type == ReOrItem::Data &&
+ (__ref1)->reOrBlock->type == ReOrBlock::RecurseItem &&
+ (__ref2)->reOrBlock->item->type == ReOrItem::Data )
{
/* Append the right side to right side of the left and toss the
* right side. */
- (&rhs[0]->user.regular_expr_or_data)->reOrBlock->item->token.append( (&rhs[1]->user.regular_expr_or_char)->reOrItem->token );
- delete (&rhs[1]->user.regular_expr_or_char)->reOrItem;
- (&redLel->user.regular_expr_or_data)->reOrBlock = (&rhs[0]->user.regular_expr_or_data)->reOrBlock;
+ (__ref3)->reOrBlock->item->token.append( (__ref4)->reOrItem->token );
+ delete (__ref5)->reOrItem;
+ (__ref6)->reOrBlock = (__ref7)->reOrBlock;
}
else {
/* Can't optimize, put the left and right under a new node. */
- (&redLel->user.regular_expr_or_data)->reOrBlock = new ReOrBlock( (&rhs[0]->user.regular_expr_or_data)->reOrBlock, (&rhs[1]->user.regular_expr_or_char)->reOrItem );
+ (__ref8)->reOrBlock = new ReOrBlock( (__ref9)->reOrBlock, (__ref10)->reOrItem );
}
-#line 5547 "rlparse.cpp"
+#line 6134 "rlparse.cpp"
} break;
case 195: {
+Parser_Lel_regular_expr_or_data *__ref0 = (Parser_Lel_regular_expr_or_data*)&redLel->user.regular_expr_or_data;
#line 1188 "rlparse.kl"
- (&redLel->user.regular_expr_or_data)->reOrBlock = new ReOrBlock();
+ (__ref0)->reOrBlock = new ReOrBlock();
-#line 5555 "rlparse.cpp"
+#line 6143 "rlparse.cpp"
} break;
case 196: {
+Parser_Lel_regular_expr_or_char *__ref0 = (Parser_Lel_regular_expr_or_char*)&redLel->user.regular_expr_or_char;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Token *__ref2 = (Token*)&rhs[0]->user.token;
#line 1200 "rlparse.kl"
- (&redLel->user.regular_expr_or_char)->reOrItem = new ReOrItem( (&rhs[0]->user.token)->loc, *(&rhs[0]->user.token) );
+ (__ref0)->reOrItem = new ReOrItem( (__ref1)->loc, *(__ref2) );
-#line 5563 "rlparse.cpp"
+#line 6154 "rlparse.cpp"
} break;
case 197: {
+Parser_Lel_regular_expr_or_char *__ref0 = (Parser_Lel_regular_expr_or_char*)&redLel->user.regular_expr_or_char;
+Token *__ref1 = (Token*)&rhs[1]->user.token;
+Token *__ref2 = (Token*)&rhs[0]->user.token;
+Token *__ref3 = (Token*)&rhs[2]->user.token;
#line 1204 "rlparse.kl"
- (&redLel->user.regular_expr_or_char)->reOrItem = new ReOrItem( (&rhs[1]->user.token)->loc, (&rhs[0]->user.token)->data[0], (&rhs[2]->user.token)->data[0] );
+ (__ref0)->reOrItem = new ReOrItem( (__ref1)->loc, (__ref2)->data[0], (__ref3)->data[0] );
-#line 5571 "rlparse.cpp"
+#line 6166 "rlparse.cpp"
} break;
case 198: {
+Parser_Lel_inline_list *__ref0 = (Parser_Lel_inline_list*)&redLel->user.inline_list;
+Parser_Lel_inline_list *__ref1 = (Parser_Lel_inline_list*)&rhs[0]->user.inline_list;
+Parser_Lel_inline_list *__ref2 = (Parser_Lel_inline_list*)&redLel->user.inline_list;
+Parser_Lel_inline_item *__ref3 = (Parser_Lel_inline_item*)&rhs[1]->user.inline_item;
#line 1221 "rlparse.kl"
/* Append the item to the list, return the list. */
- (&redLel->user.inline_list)->inlineList = (&rhs[0]->user.inline_list)->inlineList;
- (&redLel->user.inline_list)->inlineList->append( (&rhs[1]->user.inline_item)->inlineItem );
+ (__ref0)->inlineList = (__ref1)->inlineList;
+ (__ref2)->inlineList->append( (__ref3)->inlineItem );
-#line 5581 "rlparse.cpp"
+#line 6180 "rlparse.cpp"
} break;
case 199: {
+Parser_Lel_inline_list *__ref0 = (Parser_Lel_inline_list*)&redLel->user.inline_list;
#line 1228 "rlparse.kl"
/* Start with empty list. */
- (&redLel->user.inline_list)->inlineList = new InlineList;
+ (__ref0)->inlineList = new InlineList;
-#line 5590 "rlparse.cpp"
+#line 6190 "rlparse.cpp"
} break;
case 200: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Parser_Lel_token_type *__ref1 = (Parser_Lel_token_type*)&rhs[0]->user.token_type;
+Parser_Lel_token_type *__ref2 = (Parser_Lel_token_type*)&rhs[0]->user.token_type;
#line 1243 "rlparse.kl"
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token_type)->token.loc, (&rhs[0]->user.token_type)->token.data, InlineItem::Text );
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->token.loc, (__ref2)->token.data, InlineItem::Text );
-#line 5598 "rlparse.cpp"
+#line 6201 "rlparse.cpp"
} break;
case 201: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Parser_Lel_token_type *__ref1 = (Parser_Lel_token_type*)&rhs[0]->user.token_type;
+Parser_Lel_token_type *__ref2 = (Parser_Lel_token_type*)&rhs[0]->user.token_type;
#line 1249 "rlparse.kl"
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token_type)->token.loc, (&rhs[0]->user.token_type)->token.data, InlineItem::Text );
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->token.loc, (__ref2)->token.data, InlineItem::Text );
-#line 5606 "rlparse.cpp"
+#line 6212 "rlparse.cpp"
} break;
case 202: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Parser_Lel_inline_item *__ref1 = (Parser_Lel_inline_item*)&rhs[0]->user.inline_item;
#line 1255 "rlparse.kl"
/* Pass the inline item up. */
- (&redLel->user.inline_item)->inlineItem = (&rhs[0]->user.inline_item)->inlineItem;
+ (__ref0)->inlineItem = (__ref1)->inlineItem;
-#line 5615 "rlparse.cpp"
+#line 6223 "rlparse.cpp"
} break;
case 203: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1262 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 5621 "rlparse.cpp"
+#line 6231 "rlparse.cpp"
} break;
case 204: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1263 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 5627 "rlparse.cpp"
+#line 6239 "rlparse.cpp"
} break;
case 205: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1264 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 5633 "rlparse.cpp"
+#line 6247 "rlparse.cpp"
} break;
case 206: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1265 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 5639 "rlparse.cpp"
+#line 6255 "rlparse.cpp"
} break;
case 207: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1266 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 5645 "rlparse.cpp"
+#line 6263 "rlparse.cpp"
} break;
case 208: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1267 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 5651 "rlparse.cpp"
+#line 6271 "rlparse.cpp"
} break;
case 209: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Parser_Lel_inline_item *__ref1 = (Parser_Lel_inline_item*)&rhs[0]->user.inline_item;
#line 1271 "rlparse.kl"
/* Pass up interpreted items of inline expressions. */
- (&redLel->user.inline_item)->inlineItem = (&rhs[0]->user.inline_item)->inlineItem;
+ (__ref0)->inlineItem = (__ref1)->inlineItem;
-#line 5660 "rlparse.cpp"
+#line 6282 "rlparse.cpp"
} break;
case 210: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1276 "rlparse.kl"
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token)->loc, InlineItem::Hold );
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->loc, InlineItem::Hold );
-#line 5668 "rlparse.cpp"
+#line 6292 "rlparse.cpp"
} break;
case 211: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_inline_item *__ref2 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Parser_Lel_inline_list *__ref3 = (Parser_Lel_inline_list*)&rhs[1]->user.inline_list;
#line 1280 "rlparse.kl"
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token)->loc, InlineItem::Exec );
- (&redLel->user.inline_item)->inlineItem->children = (&rhs[1]->user.inline_list)->inlineList;
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->loc, InlineItem::Exec );
+ (__ref2)->inlineItem->children = (__ref3)->inlineList;
-#line 5677 "rlparse.cpp"
+#line 6305 "rlparse.cpp"
} break;
case 212: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1285 "rlparse.kl"
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token)->loc,
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->loc,
new NameRef(nameRef), InlineItem::Goto );
-#line 5686 "rlparse.cpp"
+#line 6316 "rlparse.cpp"
} break;
case 213: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_inline_item *__ref2 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Parser_Lel_inline_list *__ref3 = (Parser_Lel_inline_list*)&rhs[2]->user.inline_list;
#line 1290 "rlparse.kl"
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token)->loc, InlineItem::GotoExpr );
- (&redLel->user.inline_item)->inlineItem->children = (&rhs[2]->user.inline_list)->inlineList;
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->loc, InlineItem::GotoExpr );
+ (__ref2)->inlineItem->children = (__ref3)->inlineList;
-#line 5695 "rlparse.cpp"
+#line 6329 "rlparse.cpp"
} break;
case 214: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1295 "rlparse.kl"
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token)->loc, new NameRef(nameRef), InlineItem::Next );
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->loc, new NameRef(nameRef), InlineItem::Next );
-#line 5703 "rlparse.cpp"
+#line 6339 "rlparse.cpp"
} break;
case 215: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_inline_item *__ref2 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Parser_Lel_inline_list *__ref3 = (Parser_Lel_inline_list*)&rhs[2]->user.inline_list;
#line 1299 "rlparse.kl"
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token)->loc, InlineItem::NextExpr );
- (&redLel->user.inline_item)->inlineItem->children = (&rhs[2]->user.inline_list)->inlineList;
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->loc, InlineItem::NextExpr );
+ (__ref2)->inlineItem->children = (__ref3)->inlineList;
-#line 5712 "rlparse.cpp"
+#line 6352 "rlparse.cpp"
} break;
case 216: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1304 "rlparse.kl"
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token)->loc, new NameRef(nameRef), InlineItem::Call );
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->loc, new NameRef(nameRef), InlineItem::Call );
-#line 5720 "rlparse.cpp"
+#line 6362 "rlparse.cpp"
} break;
case 217: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
+Parser_Lel_inline_item *__ref2 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Parser_Lel_inline_list *__ref3 = (Parser_Lel_inline_list*)&rhs[2]->user.inline_list;
#line 1308 "rlparse.kl"
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token)->loc, InlineItem::CallExpr );
- (&redLel->user.inline_item)->inlineItem->children = (&rhs[2]->user.inline_list)->inlineList;
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->loc, InlineItem::CallExpr );
+ (__ref2)->inlineItem->children = (__ref3)->inlineList;
-#line 5729 "rlparse.cpp"
+#line 6375 "rlparse.cpp"
} break;
case 218: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1313 "rlparse.kl"
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token)->loc, InlineItem::Ret );
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->loc, InlineItem::Ret );
-#line 5737 "rlparse.cpp"
+#line 6385 "rlparse.cpp"
} break;
case 219: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1317 "rlparse.kl"
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token)->loc, InlineItem::Break );
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->loc, InlineItem::Break );
-#line 5745 "rlparse.cpp"
+#line 6395 "rlparse.cpp"
} break;
case 220: {
+Parser_Lel_inline_list *__ref0 = (Parser_Lel_inline_list*)&redLel->user.inline_list;
+Parser_Lel_inline_list *__ref1 = (Parser_Lel_inline_list*)&rhs[0]->user.inline_list;
+Parser_Lel_inline_list *__ref2 = (Parser_Lel_inline_list*)&redLel->user.inline_list;
+Parser_Lel_inline_item *__ref3 = (Parser_Lel_inline_item*)&rhs[1]->user.inline_item;
#line 1325 "rlparse.kl"
- (&redLel->user.inline_list)->inlineList = (&rhs[0]->user.inline_list)->inlineList;
- (&redLel->user.inline_list)->inlineList->append( (&rhs[1]->user.inline_item)->inlineItem );
+ (__ref0)->inlineList = (__ref1)->inlineList;
+ (__ref2)->inlineList->append( (__ref3)->inlineItem );
-#line 5754 "rlparse.cpp"
+#line 6408 "rlparse.cpp"
} break;
case 221: {
+Parser_Lel_inline_list *__ref0 = (Parser_Lel_inline_list*)&redLel->user.inline_list;
#line 1330 "rlparse.kl"
/* Init the list used for this expr. */
- (&redLel->user.inline_list)->inlineList = new InlineList;
+ (__ref0)->inlineList = new InlineList;
-#line 5763 "rlparse.cpp"
+#line 6418 "rlparse.cpp"
} break;
case 222: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Parser_Lel_token_type *__ref1 = (Parser_Lel_token_type*)&rhs[0]->user.token_type;
+Parser_Lel_token_type *__ref2 = (Parser_Lel_token_type*)&rhs[0]->user.token_type;
#line 1339 "rlparse.kl"
/* Return a text segment. */
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token_type)->token.loc, (&rhs[0]->user.token_type)->token.data, InlineItem::Text );
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->token.loc, (__ref2)->token.data, InlineItem::Text );
-#line 5772 "rlparse.cpp"
+#line 6430 "rlparse.cpp"
} break;
case 223: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Parser_Lel_token_type *__ref1 = (Parser_Lel_token_type*)&rhs[0]->user.token_type;
+Parser_Lel_token_type *__ref2 = (Parser_Lel_token_type*)&rhs[0]->user.token_type;
#line 1345 "rlparse.kl"
/* Return a text segment, must heap alloc the text. */
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token_type)->token.loc, (&rhs[0]->user.token_type)->token.data, InlineItem::Text );
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->token.loc, (__ref2)->token.data, InlineItem::Text );
-#line 5781 "rlparse.cpp"
+#line 6442 "rlparse.cpp"
} break;
case 224: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Parser_Lel_inline_item *__ref1 = (Parser_Lel_inline_item*)&rhs[0]->user.inline_item;
#line 1351 "rlparse.kl"
/* Pass the inline item up. */
- (&redLel->user.inline_item)->inlineItem = (&rhs[0]->user.inline_item)->inlineItem;
+ (__ref0)->inlineItem = (__ref1)->inlineItem;
-#line 5790 "rlparse.cpp"
+#line 6453 "rlparse.cpp"
} break;
case 237: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1381 "rlparse.kl"
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token)->loc, InlineItem::PChar );
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->loc, InlineItem::PChar );
-#line 5798 "rlparse.cpp"
+#line 6463 "rlparse.cpp"
} break;
case 238: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1386 "rlparse.kl"
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token)->loc, InlineItem::Char );
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->loc, InlineItem::Char );
-#line 5806 "rlparse.cpp"
+#line 6473 "rlparse.cpp"
} break;
case 239: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1391 "rlparse.kl"
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token)->loc, InlineItem::Curs );
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->loc, InlineItem::Curs );
-#line 5814 "rlparse.cpp"
+#line 6483 "rlparse.cpp"
} break;
case 240: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1396 "rlparse.kl"
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token)->loc, InlineItem::Targs );
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->loc, InlineItem::Targs );
-#line 5822 "rlparse.cpp"
+#line 6493 "rlparse.cpp"
} break;
case 241: {
+Parser_Lel_inline_item *__ref0 = (Parser_Lel_inline_item*)&redLel->user.inline_item;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1401 "rlparse.kl"
- (&redLel->user.inline_item)->inlineItem = new InlineItem( (&rhs[0]->user.token)->loc,
+ (__ref0)->inlineItem = new InlineItem( (__ref1)->loc,
new NameRef(nameRef), InlineItem::Entry );
-#line 5831 "rlparse.cpp"
+#line 6504 "rlparse.cpp"
} break;
case 243: {
#line 1412 "rlparse.kl"
@@ -5837,7 +6510,7 @@ case 243: {
nameRef.empty();
-#line 5839 "rlparse.cpp"
+#line 6512 "rlparse.cpp"
} break;
case 245: {
#line 1422 "rlparse.kl"
@@ -5847,7 +6520,7 @@ case 245: {
nameRef.setAs( 0 );
-#line 5849 "rlparse.cpp"
+#line 6522 "rlparse.cpp"
} break;
case 246: {
#line 1428 "rlparse.kl"
@@ -5855,23 +6528,25 @@ case 246: {
nameRef.empty();
-#line 5857 "rlparse.cpp"
+#line 6530 "rlparse.cpp"
} break;
case 247: {
+Token *__ref0 = (Token*)&rhs[2]->user.token;
#line 1435 "rlparse.kl"
- nameRef.append( (&rhs[2]->user.token)->data );
+ nameRef.append( (__ref0)->data );
-#line 5865 "rlparse.cpp"
+#line 6539 "rlparse.cpp"
} break;
case 248: {
+Token *__ref0 = (Token*)&rhs[0]->user.token;
#line 1440 "rlparse.kl"
- nameRef.append( (&rhs[0]->user.token)->data );
+ nameRef.append( (__ref0)->data );
-#line 5873 "rlparse.cpp"
+#line 6548 "rlparse.cpp"
} break;
}
}
@@ -5961,76 +6636,100 @@ commit_base:
}
switch ( reduction ) {
case 225: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1358 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 5966 "rlparse.cpp"
+#line 6643 "rlparse.cpp"
} break;
case 226: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1359 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 5972 "rlparse.cpp"
+#line 6651 "rlparse.cpp"
} break;
case 227: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1360 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 5978 "rlparse.cpp"
+#line 6659 "rlparse.cpp"
} break;
case 228: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1361 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 5984 "rlparse.cpp"
+#line 6667 "rlparse.cpp"
} break;
case 229: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1362 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 5990 "rlparse.cpp"
+#line 6675 "rlparse.cpp"
} break;
case 230: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1363 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 5996 "rlparse.cpp"
+#line 6683 "rlparse.cpp"
} break;
case 231: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1364 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 6002 "rlparse.cpp"
+#line 6691 "rlparse.cpp"
} break;
case 232: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1371 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 6008 "rlparse.cpp"
+#line 6699 "rlparse.cpp"
} break;
case 233: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1372 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 6014 "rlparse.cpp"
+#line 6707 "rlparse.cpp"
} break;
case 234: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1373 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 6020 "rlparse.cpp"
+#line 6715 "rlparse.cpp"
} break;
case 235: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1374 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 6026 "rlparse.cpp"
+#line 6723 "rlparse.cpp"
} break;
case 236: {
+Parser_Lel_token_type *__ref0 = (Parser_Lel_token_type*)&redLel->user.token_type;
+Token *__ref1 = (Token*)&rhs[0]->user.token;
#line 1375 "rlparse.kl"
- (&redLel->user.token_type)->token = *(&rhs[0]->user.token);
+ (__ref0)->token = *(__ref1);
-#line 6032 "rlparse.cpp"
+#line 6731 "rlparse.cpp"
} break;
}
#ifdef KELBT_LOG_ACTIONS
diff --git a/ragel/rlscan.cpp b/ragel/rlscan.cpp
index 7f27795..0912002 100644
--- a/ragel/rlscan.cpp
+++ b/ragel/rlscan.cpp
@@ -2,6 +2,7 @@
#line 1 "rlscan.rl"
/*
* Copyright 2006-2007 Adrian Thurston <thurston@complang.org>
+ * Copyright 2011 Josef Goettgens
*/
/* This file is part of Ragel.
@@ -56,11 +57,11 @@ enum InlineBlockType
*/
-#line 124 "rlscan.rl"
+#line 125 "rlscan.rl"
-#line 64 "rlscan.cpp"
+#line 65 "rlscan.cpp"
static const int inline_token_scan_start = 2;
static const int inline_token_scan_first_final = 2;
static const int inline_token_scan_error = -1;
@@ -68,7 +69,7 @@ static const int inline_token_scan_error = -1;
static const int inline_token_scan_en_main = 2;
-#line 127 "rlscan.rl"
+#line 128 "rlscan.rl"
void Scanner::flushImport()
{
@@ -77,7 +78,7 @@ void Scanner::flushImport()
int *eof = 0;
-#line 81 "rlscan.cpp"
+#line 82 "rlscan.cpp"
{
tok_cs = inline_token_scan_start;
tok_ts = 0;
@@ -85,18 +86,18 @@ void Scanner::flushImport()
tok_act = 0;
}
-#line 89 "rlscan.cpp"
+#line 90 "rlscan.cpp"
{
if ( p == pe )
goto _test_eof;
switch ( tok_cs )
{
tr0:
-#line 122 "rlscan.rl"
+#line 123 "rlscan.rl"
{{p = (( tok_te))-1;}}
goto st2;
tr1:
-#line 108 "rlscan.rl"
+#line 109 "rlscan.rl"
{ tok_te = p+1;{
int base = tok_ts - token_data;
int nameOff = 0;
@@ -111,7 +112,7 @@ tr1:
}}
goto st2;
tr2:
-#line 80 "rlscan.rl"
+#line 81 "rlscan.rl"
{ tok_te = p+1;{
int base = tok_ts - token_data;
int nameOff = 0;
@@ -126,7 +127,7 @@ tr2:
}}
goto st2;
tr3:
-#line 94 "rlscan.rl"
+#line 95 "rlscan.rl"
{ tok_te = p+1;{
int base = tok_ts - token_data;
int nameOff = 1;
@@ -141,7 +142,7 @@ tr3:
}}
goto st2;
tr4:
-#line 66 "rlscan.rl"
+#line 67 "rlscan.rl"
{ tok_te = p+1;{
int base = tok_ts - token_data;
int nameOff = 1;
@@ -156,36 +157,36 @@ tr4:
}}
goto st2;
tr5:
-#line 122 "rlscan.rl"
+#line 123 "rlscan.rl"
{ tok_te = p+1;}
goto st2;
tr8:
-#line 122 "rlscan.rl"
+#line 123 "rlscan.rl"
{ tok_te = p;p--;}
goto st2;
st2:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ tok_ts = 0;}
if ( ++p == pe )
goto _test_eof2;
case 2:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ tok_ts = p;}
-#line 175 "rlscan.cpp"
+#line 176 "rlscan.cpp"
switch( (*p) ) {
case 128: goto tr6;
case 131: goto tr7;
}
goto tr5;
tr6:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ tok_te = p+1;}
goto st3;
st3:
if ( ++p == pe )
goto _test_eof3;
case 3:
-#line 189 "rlscan.cpp"
+#line 190 "rlscan.cpp"
if ( (*p) == 61 )
goto st0;
goto tr8;
@@ -199,14 +200,14 @@ case 0:
}
goto tr0;
tr7:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ tok_te = p+1;}
goto st4;
st4:
if ( ++p == pe )
goto _test_eof4;
case 4:
-#line 210 "rlscan.cpp"
+#line 211 "rlscan.cpp"
if ( (*p) == 128 )
goto st1;
goto tr8;
@@ -239,7 +240,7 @@ case 1:
}
-#line 138 "rlscan.rl"
+#line 139 "rlscan.rl"
if ( tok_ts == 0 )
@@ -316,7 +317,7 @@ void Scanner::pass()
*/
-#line 320 "rlscan.cpp"
+#line 321 "rlscan.cpp"
static const int section_parse_start = 10;
static const int section_parse_first_final = 10;
static const int section_parse_error = 0;
@@ -324,19 +325,19 @@ static const int section_parse_error = 0;
static const int section_parse_en_main = 10;
-#line 217 "rlscan.rl"
+#line 218 "rlscan.rl"
void Scanner::init( )
{
-#line 335 "rlscan.cpp"
+#line 336 "rlscan.cpp"
{
cs = section_parse_start;
}
-#line 223 "rlscan.rl"
+#line 224 "rlscan.rl"
}
bool Scanner::active()
@@ -490,7 +491,7 @@ void Scanner::handleImport()
}
-#line 460 "rlscan.rl"
+#line 461 "rlscan.rl"
void Scanner::token( int type, char c )
@@ -530,33 +531,33 @@ void Scanner::processToken( int type, char *tokdata, int toklen )
}
-#line 534 "rlscan.cpp"
+#line 535 "rlscan.cpp"
{
if ( p == pe )
goto _test_eof;
switch ( cs )
{
tr2:
-#line 390 "rlscan.rl"
+#line 391 "rlscan.rl"
{ handleMachine(); }
goto st10;
tr6:
-#line 391 "rlscan.rl"
+#line 392 "rlscan.rl"
{ handleInclude(); }
goto st10;
tr10:
-#line 392 "rlscan.rl"
+#line 393 "rlscan.rl"
{ handleImport(); }
goto st10;
tr13:
-#line 432 "rlscan.rl"
+#line 433 "rlscan.rl"
{
if ( active() && machineSpec == 0 && machineName == 0 )
id.inputItems.tail->writeArgs.append( 0 );
}
goto st10;
tr14:
-#line 443 "rlscan.rl"
+#line 444 "rlscan.rl"
{
/* Send the token off to the parser. */
if ( active() )
@@ -567,7 +568,7 @@ st10:
if ( ++p == pe )
goto _test_eof10;
case 10:
-#line 571 "rlscan.cpp"
+#line 572 "rlscan.cpp"
switch( (*p) ) {
case 191: goto st1;
case 192: goto st3;
@@ -583,34 +584,34 @@ case 1:
goto tr1;
goto tr0;
tr0:
-#line 385 "rlscan.rl"
+#line 386 "rlscan.rl"
{ scan_error() << "bad machine statement" << endl; }
goto st0;
tr3:
-#line 386 "rlscan.rl"
+#line 387 "rlscan.rl"
{ scan_error() << "bad include statement" << endl; }
goto st0;
tr8:
-#line 387 "rlscan.rl"
+#line 388 "rlscan.rl"
{ scan_error() << "bad import statement" << endl; }
goto st0;
tr11:
-#line 388 "rlscan.rl"
+#line 389 "rlscan.rl"
{ scan_error() << "bad write statement" << endl; }
goto st0;
-#line 602 "rlscan.cpp"
+#line 603 "rlscan.cpp"
st0:
cs = 0;
goto _out;
tr1:
-#line 382 "rlscan.rl"
+#line 383 "rlscan.rl"
{ word = tokdata; word_len = toklen; }
goto st2;
st2:
if ( ++p == pe )
goto _test_eof2;
case 2:
-#line 614 "rlscan.cpp"
+#line 615 "rlscan.cpp"
if ( (*p) == 59 )
goto tr2;
goto tr0;
@@ -624,36 +625,36 @@ case 3:
}
goto tr3;
tr4:
-#line 381 "rlscan.rl"
- { word = lit = 0; word_len = lit_len = 0; }
#line 382 "rlscan.rl"
+ { word = lit = 0; word_len = lit_len = 0; }
+#line 383 "rlscan.rl"
{ word = tokdata; word_len = toklen; }
goto st4;
st4:
if ( ++p == pe )
goto _test_eof4;
case 4:
-#line 637 "rlscan.cpp"
+#line 638 "rlscan.cpp"
switch( (*p) ) {
case 59: goto tr6;
case 129: goto tr7;
}
goto tr3;
tr5:
-#line 381 "rlscan.rl"
+#line 382 "rlscan.rl"
{ word = lit = 0; word_len = lit_len = 0; }
-#line 383 "rlscan.rl"
+#line 384 "rlscan.rl"
{ lit = tokdata; lit_len = toklen; }
goto st5;
tr7:
-#line 383 "rlscan.rl"
+#line 384 "rlscan.rl"
{ lit = tokdata; lit_len = toklen; }
goto st5;
st5:
if ( ++p == pe )
goto _test_eof5;
case 5:
-#line 657 "rlscan.cpp"
+#line 658 "rlscan.cpp"
if ( (*p) == 59 )
goto tr6;
goto tr3;
@@ -665,19 +666,19 @@ case 6:
goto tr9;
goto tr8;
tr9:
-#line 383 "rlscan.rl"
+#line 384 "rlscan.rl"
{ lit = tokdata; lit_len = toklen; }
goto st7;
st7:
if ( ++p == pe )
goto _test_eof7;
case 7:
-#line 676 "rlscan.cpp"
+#line 677 "rlscan.cpp"
if ( (*p) == 59 )
goto tr10;
goto tr8;
tr18:
-#line 412 "rlscan.rl"
+#line 413 "rlscan.rl"
{
if ( active() && machineSpec == 0 && machineName == 0 ) {
InputItem *inputItem = new InputItem;
@@ -695,12 +696,12 @@ st8:
if ( ++p == pe )
goto _test_eof8;
case 8:
-#line 699 "rlscan.cpp"
+#line 700 "rlscan.cpp"
if ( (*p) == 128 )
goto tr12;
goto tr11;
tr12:
-#line 426 "rlscan.rl"
+#line 427 "rlscan.rl"
{
if ( active() && machineSpec == 0 && machineName == 0 )
id.inputItems.tail->writeArgs.append( strdup(tokdata) );
@@ -710,7 +711,7 @@ st9:
if ( ++p == pe )
goto _test_eof9;
case 9:
-#line 714 "rlscan.cpp"
+#line 715 "rlscan.cpp"
switch( (*p) ) {
case 59: goto tr13;
case 128: goto tr12;
@@ -734,33 +735,33 @@ case 9:
switch ( cs ) {
case 1:
case 2:
-#line 385 "rlscan.rl"
+#line 386 "rlscan.rl"
{ scan_error() << "bad machine statement" << endl; }
break;
case 3:
case 4:
case 5:
-#line 386 "rlscan.rl"
+#line 387 "rlscan.rl"
{ scan_error() << "bad include statement" << endl; }
break;
case 6:
case 7:
-#line 387 "rlscan.rl"
+#line 388 "rlscan.rl"
{ scan_error() << "bad import statement" << endl; }
break;
case 8:
case 9:
-#line 388 "rlscan.rl"
+#line 389 "rlscan.rl"
{ scan_error() << "bad write statement" << endl; }
break;
-#line 757 "rlscan.cpp"
+#line 758 "rlscan.cpp"
}
}
_out: {}
}
-#line 501 "rlscan.rl"
+#line 502 "rlscan.rl"
updateCol();
@@ -876,6 +877,16 @@ ifstream *Scanner::tryOpenInclude( char **pathChecks, long &found )
found = check - pathChecks;
return inFile;
}
+
+ /*
+ * 03/26/2011 jg:
+ * Don't rely on sloppy runtime behaviour: reset the state of the stream explicitly.
+ * If inFile->open() fails, which happens when include dirs are tested, the fail bit
+ * is set by the runtime library. Currently the VS runtime library opens new files,
+ * but when it comes to reading it refuses to work.
+ */
+ inFile->clear();
+
check += 1;
}
@@ -885,11 +896,11 @@ ifstream *Scanner::tryOpenInclude( char **pathChecks, long &found )
}
-#line 1162 "rlscan.rl"
+#line 1173 "rlscan.rl"
-#line 893 "rlscan.cpp"
+#line 904 "rlscan.cpp"
static const int rlscan_start = 38;
static const int rlscan_first_final = 38;
static const int rlscan_error = 0;
@@ -904,7 +915,7 @@ static const int rlscan_en_main_ruby = 253;
static const int rlscan_en_main = 38;
-#line 1165 "rlscan.rl"
+#line 1176 "rlscan.rl"
void Scanner::do_scan()
{
@@ -925,7 +936,7 @@ void Scanner::do_scan()
/* Init the section parser and the character scanner. */
init();
-#line 929 "rlscan.cpp"
+#line 940 "rlscan.cpp"
{
cs = rlscan_start;
top = 0;
@@ -934,7 +945,7 @@ void Scanner::do_scan()
act = 0;
}
-#line 1185 "rlscan.rl"
+#line 1196 "rlscan.rl"
/* Set up the start state. FIXME: After 5.20 is released the nocs write
* init option should be used, the main machine eliminated and this statement moved
@@ -980,7 +991,7 @@ void Scanner::do_scan()
}
-#line 984 "rlscan.cpp"
+#line 995 "rlscan.cpp"
{
if ( p == pe )
goto _test_eof;
@@ -1260,45 +1271,45 @@ _resume:
switch ( cs )
{
tr0:
-#line 1160 "rlscan.rl"
+#line 1171 "rlscan.rl"
{{p = ((te))-1;}{ pass( *ts, 0, 0 ); }}
goto st38;
tr3:
-#line 1144 "rlscan.rl"
+#line 1155 "rlscan.rl"
{te = p+1;{ pass( IMP_Literal, ts, te ); }}
goto st38;
tr11:
-#line 1143 "rlscan.rl"
+#line 1154 "rlscan.rl"
{te = p+1;{ pass(); }}
goto st38;
tr13:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
line++;
}
-#line 1143 "rlscan.rl"
+#line 1154 "rlscan.rl"
{te = p+1;{ pass(); }}
goto st38;
tr71:
-#line 1160 "rlscan.rl"
+#line 1171 "rlscan.rl"
{te = p+1;{ pass( *ts, 0, 0 ); }}
goto st38;
tr72:
-#line 1159 "rlscan.rl"
+#line 1170 "rlscan.rl"
{te = p+1;}
goto st38;
tr82:
-#line 1158 "rlscan.rl"
+#line 1169 "rlscan.rl"
{te = p;p--;{ pass(); }}
goto st38;
tr83:
-#line 1160 "rlscan.rl"
+#line 1171 "rlscan.rl"
{te = p;p--;{ pass( *ts, 0, 0 ); }}
goto st38;
tr85:
-#line 1152 "rlscan.rl"
+#line 1163 "rlscan.rl"
{te = p;p--;{
updateCol();
singleLineSpec = true;
@@ -1307,7 +1318,7 @@ tr85:
}}
goto st38;
tr86:
-#line 1146 "rlscan.rl"
+#line 1157 "rlscan.rl"
{te = p+1;{
updateCol();
singleLineSpec = false;
@@ -1316,11 +1327,11 @@ tr86:
}}
goto st38;
tr87:
-#line 1142 "rlscan.rl"
+#line 1153 "rlscan.rl"
{te = p;p--;{ pass( IMP_UInt, ts, te ); }}
goto st38;
tr88:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ switch( act ) {
case 176:
{{p = ((te))-1;} pass( IMP_Define, 0, 0 ); }
@@ -1332,18 +1343,18 @@ tr88:
}
goto st38;
tr89:
-#line 1141 "rlscan.rl"
+#line 1152 "rlscan.rl"
{te = p;p--;{ pass( IMP_Word, ts, te ); }}
goto st38;
st38:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ts = 0;}
if ( ++p == pe )
goto _test_eof38;
case 38:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ts = p;}
-#line 1347 "rlscan.cpp"
+#line 1358 "rlscan.cpp"
switch( (*p) ) {
case 0: goto tr72;
case 9: goto st39;
@@ -1366,7 +1377,7 @@ case 38:
goto tr80;
goto tr71;
tr74:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -1377,7 +1388,7 @@ st39:
if ( ++p == pe )
goto _test_eof39;
case 39:
-#line 1381 "rlscan.cpp"
+#line 1392 "rlscan.cpp"
switch( (*p) ) {
case 9: goto st39;
case 10: goto tr74;
@@ -1385,14 +1396,14 @@ case 39:
}
goto tr82;
tr75:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st40;
st40:
if ( ++p == pe )
goto _test_eof40;
case 40:
-#line 1396 "rlscan.cpp"
+#line 1407 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr2;
case 34: goto tr3;
@@ -1400,7 +1411,7 @@ case 40:
}
goto st1;
tr2:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -1411,7 +1422,7 @@ st1:
if ( ++p == pe )
goto _test_eof1;
case 1:
-#line 1415 "rlscan.cpp"
+#line 1426 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr2;
case 34: goto tr3;
@@ -1440,14 +1451,14 @@ case 42:
goto tr86;
goto tr85;
tr77:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st43;
st43:
if ( ++p == pe )
goto _test_eof43;
case 43:
-#line 1451 "rlscan.cpp"
+#line 1462 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr6;
case 39: goto tr3;
@@ -1455,7 +1466,7 @@ case 43:
}
goto st3;
tr6:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -1466,7 +1477,7 @@ st3:
if ( ++p == pe )
goto _test_eof3;
case 3:
-#line 1470 "rlscan.cpp"
+#line 1481 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr6;
case 39: goto tr3;
@@ -1481,21 +1492,21 @@ case 4:
goto tr6;
goto st3;
tr78:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st44;
st44:
if ( ++p == pe )
goto _test_eof44;
case 44:
-#line 1492 "rlscan.cpp"
+#line 1503 "rlscan.cpp"
switch( (*p) ) {
case 42: goto st5;
case 47: goto st7;
}
goto tr83;
tr9:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -1506,7 +1517,7 @@ st5:
if ( ++p == pe )
goto _test_eof5;
case 5:
-#line 1510 "rlscan.cpp"
+#line 1521 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr9;
case 42: goto st6;
@@ -1537,22 +1548,22 @@ case 45:
goto st45;
goto tr87;
tr80:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 1141 "rlscan.rl"
+#line 1152 "rlscan.rl"
{act = 177;}
goto st46;
tr94:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 1140 "rlscan.rl"
+#line 1151 "rlscan.rl"
{act = 176;}
goto st46;
st46:
if ( ++p == pe )
goto _test_eof46;
case 46:
-#line 1556 "rlscan.cpp"
+#line 1567 "rlscan.cpp"
if ( (*p) == 95 )
goto tr80;
if ( (*p) < 65 ) {
@@ -1650,50 +1661,50 @@ case 51:
goto tr80;
goto tr89;
tr14:
-#line 759 "rlscan.rl"
+#line 770 "rlscan.rl"
{{p = ((te))-1;}{ token( IL_Symbol, ts, te ); }}
goto st52;
tr17:
-#line 705 "rlscan.rl"
+#line 716 "rlscan.rl"
{te = p+1;{ token( IL_Literal, ts, te ); }}
goto st52;
tr20:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
line++;
}
-#line 712 "rlscan.rl"
+#line 723 "rlscan.rl"
{te = p+1;{ token( IL_Comment, ts, te ); }}
goto st52;
tr27:
-#line 701 "rlscan.rl"
+#line 712 "rlscan.rl"
{{p = ((te))-1;}{ token( TK_UInt, ts, te ); }}
goto st52;
tr95:
-#line 759 "rlscan.rl"
+#line 770 "rlscan.rl"
{te = p+1;{ token( IL_Symbol, ts, te ); }}
goto st52;
tr96:
-#line 754 "rlscan.rl"
+#line 765 "rlscan.rl"
{te = p+1;{
scan_error() << "unterminated code block" << endl;
}}
goto st52;
tr102:
-#line 734 "rlscan.rl"
+#line 745 "rlscan.rl"
{te = p+1;{ token( *ts, ts, te ); }}
goto st52;
tr103:
-#line 729 "rlscan.rl"
+#line 740 "rlscan.rl"
{te = p+1;{
whitespaceOn = true;
token( *ts, ts, te );
}}
goto st52;
tr108:
-#line 722 "rlscan.rl"
+#line 733 "rlscan.rl"
{te = p+1;{
whitespaceOn = true;
token( *ts, ts, te );
@@ -1702,14 +1713,14 @@ tr108:
}}
goto st52;
tr111:
-#line 736 "rlscan.rl"
+#line 747 "rlscan.rl"
{te = p+1;{
token( IL_Symbol, ts, te );
curly_count += 1;
}}
goto st52;
tr112:
-#line 741 "rlscan.rl"
+#line 752 "rlscan.rl"
{te = p+1;{
if ( --curly_count == 0 && inlineBlockType == CurlyDelimited ) {
/* Inline code block ends. */
@@ -1724,30 +1735,30 @@ tr112:
}}
goto st52;
tr113:
-#line 707 "rlscan.rl"
+#line 718 "rlscan.rl"
{te = p;p--;{
if ( whitespaceOn )
token( IL_WhiteSpace, ts, te );
}}
goto st52;
tr114:
-#line 759 "rlscan.rl"
+#line 770 "rlscan.rl"
{te = p;p--;{ token( IL_Symbol, ts, te ); }}
goto st52;
tr115:
-#line 701 "rlscan.rl"
+#line 712 "rlscan.rl"
{te = p;p--;{ token( TK_UInt, ts, te ); }}
goto st52;
tr117:
-#line 702 "rlscan.rl"
+#line 713 "rlscan.rl"
{te = p;p--;{ token( TK_Hex, ts, te ); }}
goto st52;
tr118:
-#line 714 "rlscan.rl"
+#line 725 "rlscan.rl"
{te = p+1;{ token( TK_NameSep, ts, te ); }}
goto st52;
tr119:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ switch( act ) {
case 1:
{{p = ((te))-1;} token( KW_PChar ); }
@@ -1810,22 +1821,22 @@ tr119:
}
goto st52;
tr120:
-#line 699 "rlscan.rl"
+#line 710 "rlscan.rl"
{te = p;p--;{ token( TK_Word, ts, te ); }}
goto st52;
tr134:
-#line 664 "rlscan.rl"
+#line 675 "rlscan.rl"
{te = p;p--;{ token( KW_Char ); }}
goto st52;
st52:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ts = 0;}
if ( ++p == pe )
goto _test_eof52;
case 52:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ts = p;}
-#line 1829 "rlscan.cpp"
+#line 1840 "rlscan.cpp"
switch( (*p) ) {
case 0: goto tr96;
case 9: goto st53;
@@ -1858,7 +1869,7 @@ case 52:
goto st59;
goto tr95;
tr98:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -1869,7 +1880,7 @@ st53:
if ( ++p == pe )
goto _test_eof53;
case 53:
-#line 1873 "rlscan.cpp"
+#line 1884 "rlscan.cpp"
switch( (*p) ) {
case 9: goto st53;
case 10: goto tr98;
@@ -1877,14 +1888,14 @@ case 53:
}
goto tr113;
tr99:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st54;
st54:
if ( ++p == pe )
goto _test_eof54;
case 54:
-#line 1888 "rlscan.cpp"
+#line 1899 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr16;
case 34: goto tr17;
@@ -1892,7 +1903,7 @@ case 54:
}
goto st8;
tr16:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -1903,7 +1914,7 @@ st8:
if ( ++p == pe )
goto _test_eof8;
case 8:
-#line 1907 "rlscan.cpp"
+#line 1918 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr16;
case 34: goto tr17;
@@ -1918,14 +1929,14 @@ case 9:
goto tr16;
goto st8;
tr100:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st55;
st55:
if ( ++p == pe )
goto _test_eof55;
case 55:
-#line 1929 "rlscan.cpp"
+#line 1940 "rlscan.cpp"
if ( (*p) == 10 )
goto tr20;
goto st10;
@@ -1937,14 +1948,14 @@ case 10:
goto tr20;
goto st10;
tr101:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st56;
st56:
if ( ++p == pe )
goto _test_eof56;
case 56:
-#line 1948 "rlscan.cpp"
+#line 1959 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr22;
case 39: goto tr17;
@@ -1952,7 +1963,7 @@ case 56:
}
goto st11;
tr22:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -1963,7 +1974,7 @@ st11:
if ( ++p == pe )
goto _test_eof11;
case 11:
-#line 1967 "rlscan.cpp"
+#line 1978 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr22;
case 39: goto tr17;
@@ -1978,14 +1989,14 @@ case 12:
goto tr22;
goto st11;
tr104:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st57;
st57:
if ( ++p == pe )
goto _test_eof57;
case 57:
-#line 1989 "rlscan.cpp"
+#line 2000 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr25;
case 47: goto tr17;
@@ -1993,7 +2004,7 @@ case 57:
}
goto st13;
tr25:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -2004,7 +2015,7 @@ st13:
if ( ++p == pe )
goto _test_eof13;
case 13:
-#line 2008 "rlscan.cpp"
+#line 2019 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr25;
case 47: goto tr17;
@@ -2019,14 +2030,14 @@ case 14:
goto tr25;
goto st13;
tr105:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st58;
st58:
if ( ++p == pe )
goto _test_eof58;
case 58:
-#line 2030 "rlscan.cpp"
+#line 2041 "rlscan.cpp"
if ( (*p) == 120 )
goto st15;
if ( 48 <= (*p) && (*p) <= 57 )
@@ -2073,82 +2084,82 @@ case 61:
goto tr118;
goto tr114;
tr109:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 699 "rlscan.rl"
+#line 710 "rlscan.rl"
{act = 13;}
goto st62;
tr133:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 694 "rlscan.rl"
+#line 705 "rlscan.rl"
{act = 12;}
goto st62;
tr138:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 686 "rlscan.rl"
+#line 697 "rlscan.rl"
{act = 10;}
goto st62;
tr140:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 665 "rlscan.rl"
+#line 676 "rlscan.rl"
{act = 3;}
goto st62;
tr145:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 667 "rlscan.rl"
+#line 678 "rlscan.rl"
{act = 5;}
goto st62;
tr147:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 677 "rlscan.rl"
+#line 688 "rlscan.rl"
{act = 7;}
goto st62;
tr150:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 678 "rlscan.rl"
+#line 689 "rlscan.rl"
{act = 8;}
goto st62;
tr153:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 673 "rlscan.rl"
+#line 684 "rlscan.rl"
{act = 6;}
goto st62;
tr156:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 682 "rlscan.rl"
+#line 693 "rlscan.rl"
{act = 9;}
goto st62;
tr157:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 663 "rlscan.rl"
+#line 674 "rlscan.rl"
{act = 1;}
goto st62;
tr159:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 690 "rlscan.rl"
+#line 701 "rlscan.rl"
{act = 11;}
goto st62;
tr163:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 666 "rlscan.rl"
+#line 677 "rlscan.rl"
{act = 4;}
goto st62;
st62:
if ( ++p == pe )
goto _test_eof62;
case 62:
-#line 2152 "rlscan.cpp"
+#line 2163 "rlscan.cpp"
if ( (*p) == 95 )
goto tr109;
if ( (*p) < 65 ) {
@@ -2715,54 +2726,54 @@ case 94:
goto tr109;
goto tr120;
tr29:
-#line 862 "rlscan.rl"
+#line 873 "rlscan.rl"
{{p = ((te))-1;}{ token( IL_Symbol, ts, te ); }}
goto st95;
tr32:
-#line 808 "rlscan.rl"
+#line 819 "rlscan.rl"
{te = p+1;{ token( IL_Literal, ts, te ); }}
goto st95;
tr40:
-#line 815 "rlscan.rl"
+#line 826 "rlscan.rl"
{te = p+1;{ token( IL_Comment, ts, te ); }}
goto st95;
tr42:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
line++;
}
-#line 815 "rlscan.rl"
+#line 826 "rlscan.rl"
{te = p+1;{ token( IL_Comment, ts, te ); }}
goto st95;
tr43:
-#line 804 "rlscan.rl"
+#line 815 "rlscan.rl"
{{p = ((te))-1;}{ token( TK_UInt, ts, te ); }}
goto st95;
tr164:
-#line 862 "rlscan.rl"
+#line 873 "rlscan.rl"
{te = p+1;{ token( IL_Symbol, ts, te ); }}
goto st95;
tr165:
-#line 857 "rlscan.rl"
+#line 868 "rlscan.rl"
{te = p+1;{
scan_error() << "unterminated code block" << endl;
}}
goto st95;
tr170:
-#line 837 "rlscan.rl"
+#line 848 "rlscan.rl"
{te = p+1;{ token( *ts, ts, te ); }}
goto st95;
tr171:
-#line 832 "rlscan.rl"
+#line 843 "rlscan.rl"
{te = p+1;{
whitespaceOn = true;
token( *ts, ts, te );
}}
goto st95;
tr176:
-#line 825 "rlscan.rl"
+#line 836 "rlscan.rl"
{te = p+1;{
whitespaceOn = true;
token( *ts, ts, te );
@@ -2771,14 +2782,14 @@ tr176:
}}
goto st95;
tr179:
-#line 839 "rlscan.rl"
+#line 850 "rlscan.rl"
{te = p+1;{
token( IL_Symbol, ts, te );
curly_count += 1;
}}
goto st95;
tr180:
-#line 844 "rlscan.rl"
+#line 855 "rlscan.rl"
{te = p+1;{
if ( --curly_count == 0 && inlineBlockType == CurlyDelimited ) {
/* Inline code block ends. */
@@ -2793,30 +2804,30 @@ tr180:
}}
goto st95;
tr181:
-#line 810 "rlscan.rl"
+#line 821 "rlscan.rl"
{te = p;p--;{
if ( whitespaceOn )
token( IL_WhiteSpace, ts, te );
}}
goto st95;
tr182:
-#line 862 "rlscan.rl"
+#line 873 "rlscan.rl"
{te = p;p--;{ token( IL_Symbol, ts, te ); }}
goto st95;
tr183:
-#line 804 "rlscan.rl"
+#line 815 "rlscan.rl"
{te = p;p--;{ token( TK_UInt, ts, te ); }}
goto st95;
tr185:
-#line 805 "rlscan.rl"
+#line 816 "rlscan.rl"
{te = p;p--;{ token( TK_Hex, ts, te ); }}
goto st95;
tr186:
-#line 817 "rlscan.rl"
+#line 828 "rlscan.rl"
{te = p+1;{ token( TK_NameSep, ts, te ); }}
goto st95;
tr187:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ switch( act ) {
case 27:
{{p = ((te))-1;} token( KW_PChar ); }
@@ -2879,22 +2890,22 @@ tr187:
}
goto st95;
tr188:
-#line 802 "rlscan.rl"
+#line 813 "rlscan.rl"
{te = p;p--;{ token( TK_Word, ts, te ); }}
goto st95;
tr202:
-#line 767 "rlscan.rl"
+#line 778 "rlscan.rl"
{te = p;p--;{ token( KW_Char ); }}
goto st95;
st95:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ts = 0;}
if ( ++p == pe )
goto _test_eof95;
case 95:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ts = p;}
-#line 2898 "rlscan.cpp"
+#line 2909 "rlscan.cpp"
switch( (*p) ) {
case 0: goto tr165;
case 9: goto st96;
@@ -2926,7 +2937,7 @@ case 95:
goto st101;
goto tr164;
tr167:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -2937,7 +2948,7 @@ st96:
if ( ++p == pe )
goto _test_eof96;
case 96:
-#line 2941 "rlscan.cpp"
+#line 2952 "rlscan.cpp"
switch( (*p) ) {
case 9: goto st96;
case 10: goto tr167;
@@ -2945,14 +2956,14 @@ case 96:
}
goto tr181;
tr168:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st97;
st97:
if ( ++p == pe )
goto _test_eof97;
case 97:
-#line 2956 "rlscan.cpp"
+#line 2967 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr31;
case 34: goto tr32;
@@ -2960,7 +2971,7 @@ case 97:
}
goto st16;
tr31:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -2971,7 +2982,7 @@ st16:
if ( ++p == pe )
goto _test_eof16;
case 16:
-#line 2975 "rlscan.cpp"
+#line 2986 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr31;
case 34: goto tr32;
@@ -2986,14 +2997,14 @@ case 17:
goto tr31;
goto st16;
tr169:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st98;
st98:
if ( ++p == pe )
goto _test_eof98;
case 98:
-#line 2997 "rlscan.cpp"
+#line 3008 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr35;
case 39: goto tr32;
@@ -3001,7 +3012,7 @@ case 98:
}
goto st18;
tr35:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -3012,7 +3023,7 @@ st18:
if ( ++p == pe )
goto _test_eof18;
case 18:
-#line 3016 "rlscan.cpp"
+#line 3027 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr35;
case 39: goto tr32;
@@ -3027,21 +3038,21 @@ case 19:
goto tr35;
goto st18;
tr172:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st99;
st99:
if ( ++p == pe )
goto _test_eof99;
case 99:
-#line 3038 "rlscan.cpp"
+#line 3049 "rlscan.cpp"
switch( (*p) ) {
case 42: goto st20;
case 47: goto st22;
}
goto tr182;
tr38:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -3052,7 +3063,7 @@ st20:
if ( ++p == pe )
goto _test_eof20;
case 20:
-#line 3056 "rlscan.cpp"
+#line 3067 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr38;
case 42: goto st21;
@@ -3076,14 +3087,14 @@ case 22:
goto tr42;
goto st22;
tr173:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st100;
st100:
if ( ++p == pe )
goto _test_eof100;
case 100:
-#line 3087 "rlscan.cpp"
+#line 3098 "rlscan.cpp"
if ( (*p) == 120 )
goto st23;
if ( 48 <= (*p) && (*p) <= 57 )
@@ -3130,82 +3141,82 @@ case 103:
goto tr186;
goto tr182;
tr177:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 802 "rlscan.rl"
+#line 813 "rlscan.rl"
{act = 39;}
goto st104;
tr201:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 797 "rlscan.rl"
+#line 808 "rlscan.rl"
{act = 38;}
goto st104;
tr206:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 789 "rlscan.rl"
+#line 800 "rlscan.rl"
{act = 36;}
goto st104;
tr208:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 768 "rlscan.rl"
+#line 779 "rlscan.rl"
{act = 29;}
goto st104;
tr213:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 770 "rlscan.rl"
+#line 781 "rlscan.rl"
{act = 31;}
goto st104;
tr215:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 780 "rlscan.rl"
+#line 791 "rlscan.rl"
{act = 33;}
goto st104;
tr218:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 781 "rlscan.rl"
+#line 792 "rlscan.rl"
{act = 34;}
goto st104;
tr221:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 776 "rlscan.rl"
+#line 787 "rlscan.rl"
{act = 32;}
goto st104;
tr224:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 785 "rlscan.rl"
+#line 796 "rlscan.rl"
{act = 35;}
goto st104;
tr225:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 766 "rlscan.rl"
+#line 777 "rlscan.rl"
{act = 27;}
goto st104;
tr227:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 793 "rlscan.rl"
+#line 804 "rlscan.rl"
{act = 37;}
goto st104;
tr231:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 769 "rlscan.rl"
+#line 780 "rlscan.rl"
{act = 30;}
goto st104;
st104:
if ( ++p == pe )
goto _test_eof104;
case 104:
-#line 3209 "rlscan.cpp"
+#line 3220 "rlscan.cpp"
if ( (*p) == 95 )
goto tr177;
if ( (*p) < 65 ) {
@@ -3772,76 +3783,76 @@ case 136:
goto tr177;
goto tr188;
tr232:
-#line 889 "rlscan.rl"
+#line 900 "rlscan.rl"
{te = p+1;{ token( RE_Char, ts, te ); }}
goto st137;
tr233:
-#line 884 "rlscan.rl"
+#line 895 "rlscan.rl"
{te = p+1;{
scan_error() << "unterminated OR literal" << endl;
}}
goto st137;
tr234:
-#line 879 "rlscan.rl"
+#line 890 "rlscan.rl"
{te = p+1;{ token( RE_Dash, 0, 0 ); }}
goto st137;
tr236:
-#line 882 "rlscan.rl"
+#line 893 "rlscan.rl"
{te = p+1;{ token( RE_SqClose ); {cs = stack[--top];goto _again;} }}
goto st137;
tr237:
-#line 889 "rlscan.rl"
+#line 900 "rlscan.rl"
{te = p;p--;{ token( RE_Char, ts, te ); }}
goto st137;
tr238:
-#line 876 "rlscan.rl"
+#line 887 "rlscan.rl"
{te = p+1;{ token( RE_Char, ts+1, te ); }}
goto st137;
tr239:
-#line 875 "rlscan.rl"
+#line 886 "rlscan.rl"
{te = p+1;{ updateCol(); }}
goto st137;
tr240:
-#line 867 "rlscan.rl"
+#line 878 "rlscan.rl"
{te = p+1;{ token( RE_Char, '\0' ); }}
goto st137;
tr241:
-#line 868 "rlscan.rl"
+#line 879 "rlscan.rl"
{te = p+1;{ token( RE_Char, '\a' ); }}
goto st137;
tr242:
-#line 869 "rlscan.rl"
+#line 880 "rlscan.rl"
{te = p+1;{ token( RE_Char, '\b' ); }}
goto st137;
tr243:
-#line 873 "rlscan.rl"
+#line 884 "rlscan.rl"
{te = p+1;{ token( RE_Char, '\f' ); }}
goto st137;
tr244:
-#line 871 "rlscan.rl"
+#line 882 "rlscan.rl"
{te = p+1;{ token( RE_Char, '\n' ); }}
goto st137;
tr245:
-#line 874 "rlscan.rl"
+#line 885 "rlscan.rl"
{te = p+1;{ token( RE_Char, '\r' ); }}
goto st137;
tr246:
-#line 870 "rlscan.rl"
+#line 881 "rlscan.rl"
{te = p+1;{ token( RE_Char, '\t' ); }}
goto st137;
tr247:
-#line 872 "rlscan.rl"
+#line 883 "rlscan.rl"
{te = p+1;{ token( RE_Char, '\v' ); }}
goto st137;
st137:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ts = 0;}
if ( ++p == pe )
goto _test_eof137;
case 137:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ts = p;}
-#line 3845 "rlscan.cpp"
+#line 3856 "rlscan.cpp"
switch( (*p) ) {
case 0: goto tr233;
case 45: goto tr234;
@@ -3866,98 +3877,98 @@ case 138:
}
goto tr238;
tr248:
-#line 924 "rlscan.rl"
+#line 935 "rlscan.rl"
{te = p+1;{ token( RE_Char, ts, te ); }}
goto st139;
tr249:
-#line 919 "rlscan.rl"
+#line 930 "rlscan.rl"
{te = p+1;{
scan_error() << "unterminated regular expression" << endl;
}}
goto st139;
tr250:
-#line 914 "rlscan.rl"
+#line 925 "rlscan.rl"
{te = p+1;{ token( RE_Star ); }}
goto st139;
tr251:
-#line 913 "rlscan.rl"
+#line 924 "rlscan.rl"
{te = p+1;{ token( RE_Dot ); }}
goto st139;
tr255:
-#line 907 "rlscan.rl"
+#line 918 "rlscan.rl"
{te = p;p--;{
token( RE_Slash, ts, te );
{goto st146;}
}}
goto st139;
tr256:
-#line 907 "rlscan.rl"
+#line 918 "rlscan.rl"
{te = p+1;{
token( RE_Slash, ts, te );
{goto st146;}
}}
goto st139;
tr257:
-#line 916 "rlscan.rl"
+#line 927 "rlscan.rl"
{te = p;p--;{ token( RE_SqOpen ); {stack[top++] = 139; goto st137;} }}
goto st139;
tr258:
-#line 917 "rlscan.rl"
+#line 928 "rlscan.rl"
{te = p+1;{ token( RE_SqOpenNeg ); {stack[top++] = 139; goto st137;} }}
goto st139;
tr259:
-#line 924 "rlscan.rl"
+#line 935 "rlscan.rl"
{te = p;p--;{ token( RE_Char, ts, te ); }}
goto st139;
tr260:
-#line 904 "rlscan.rl"
+#line 915 "rlscan.rl"
{te = p+1;{ token( RE_Char, ts+1, te ); }}
goto st139;
tr261:
-#line 903 "rlscan.rl"
+#line 914 "rlscan.rl"
{te = p+1;{ updateCol(); }}
goto st139;
tr262:
-#line 895 "rlscan.rl"
+#line 906 "rlscan.rl"
{te = p+1;{ token( RE_Char, '\0' ); }}
goto st139;
tr263:
-#line 896 "rlscan.rl"
+#line 907 "rlscan.rl"
{te = p+1;{ token( RE_Char, '\a' ); }}
goto st139;
tr264:
-#line 897 "rlscan.rl"
+#line 908 "rlscan.rl"
{te = p+1;{ token( RE_Char, '\b' ); }}
goto st139;
tr265:
-#line 901 "rlscan.rl"
+#line 912 "rlscan.rl"
{te = p+1;{ token( RE_Char, '\f' ); }}
goto st139;
tr266:
-#line 899 "rlscan.rl"
+#line 910 "rlscan.rl"
{te = p+1;{ token( RE_Char, '\n' ); }}
goto st139;
tr267:
-#line 902 "rlscan.rl"
+#line 913 "rlscan.rl"
{te = p+1;{ token( RE_Char, '\r' ); }}
goto st139;
tr268:
-#line 898 "rlscan.rl"
+#line 909 "rlscan.rl"
{te = p+1;{ token( RE_Char, '\t' ); }}
goto st139;
tr269:
-#line 900 "rlscan.rl"
+#line 911 "rlscan.rl"
{te = p+1;{ token( RE_Char, '\v' ); }}
goto st139;
st139:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ts = 0;}
if ( ++p == pe )
goto _test_eof139;
case 139:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ts = p;}
-#line 3961 "rlscan.cpp"
+#line 3972 "rlscan.cpp"
switch( (*p) ) {
case 0: goto tr249;
case 42: goto tr250;
@@ -3998,32 +4009,32 @@ case 142:
}
goto tr260;
tr270:
-#line 933 "rlscan.rl"
+#line 944 "rlscan.rl"
{te = p+1;{
scan_error() << "unterminated write statement" << endl;
}}
goto st143;
tr273:
-#line 931 "rlscan.rl"
+#line 942 "rlscan.rl"
{te = p+1;{ token( ';' ); {goto st146;} }}
goto st143;
tr275:
-#line 930 "rlscan.rl"
+#line 941 "rlscan.rl"
{te = p;p--;{ updateCol(); }}
goto st143;
tr276:
-#line 929 "rlscan.rl"
+#line 940 "rlscan.rl"
{te = p;p--;{ token( TK_Word, ts, te ); }}
goto st143;
st143:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ts = 0;}
if ( ++p == pe )
goto _test_eof143;
case 143:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ts = p;}
-#line 4027 "rlscan.cpp"
+#line 4038 "rlscan.cpp"
switch( (*p) ) {
case 0: goto tr270;
case 32: goto st144;
@@ -4067,25 +4078,25 @@ case 145:
goto st145;
goto tr276;
tr45:
-#line 1110 "rlscan.rl"
+#line 1121 "rlscan.rl"
{{p = ((te))-1;}{ token( *ts ); }}
goto st146;
tr51:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
line++;
}
-#line 1007 "rlscan.rl"
+#line 1018 "rlscan.rl"
{te = p+1;{ updateCol(); }}
goto st146;
tr55:
-#line 994 "rlscan.rl"
+#line 1005 "rlscan.rl"
{{p = ((te))-1;}{ token( TK_UInt, ts, te ); }}
goto st146;
tr57:
-#line 1075 "rlscan.rl"
+#line 1086 "rlscan.rl"
{te = p+1;{
updateCol();
endSection();
@@ -4093,23 +4104,23 @@ tr57:
}}
goto st146;
tr277:
-#line 1110 "rlscan.rl"
+#line 1121 "rlscan.rl"
{te = p+1;{ token( *ts ); }}
goto st146;
tr278:
-#line 1106 "rlscan.rl"
+#line 1117 "rlscan.rl"
{te = p+1;{
scan_error() << "unterminated ragel section" << endl;
}}
goto st146;
tr280:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
line++;
}
-#line 1084 "rlscan.rl"
+#line 1095 "rlscan.rl"
{te = p+1;{
updateCol();
if ( singleLineSpec ) {
@@ -4119,11 +4130,11 @@ tr280:
}}
goto st146;
tr289:
-#line 1004 "rlscan.rl"
+#line 1015 "rlscan.rl"
{te = p+1;{ token( RE_Slash ); {goto st139;} }}
goto st146;
tr311:
-#line 1092 "rlscan.rl"
+#line 1103 "rlscan.rl"
{te = p+1;{
if ( lastToken == KW_Export || lastToken == KW_Entry )
token( '{' );
@@ -4139,207 +4150,207 @@ tr311:
}}
goto st146;
tr314:
-#line 1081 "rlscan.rl"
+#line 1092 "rlscan.rl"
{te = p;p--;{ updateCol(); }}
goto st146;
tr315:
-#line 1110 "rlscan.rl"
+#line 1121 "rlscan.rl"
{te = p;p--;{ token( *ts ); }}
goto st146;
tr316:
-#line 999 "rlscan.rl"
+#line 1010 "rlscan.rl"
{te = p;p--;{ token( TK_Literal, ts, te ); }}
goto st146;
tr317:
-#line 999 "rlscan.rl"
+#line 1010 "rlscan.rl"
{te = p+1;{ token( TK_Literal, ts, te ); }}
goto st146;
tr318:
-#line 1037 "rlscan.rl"
+#line 1048 "rlscan.rl"
{te = p+1;{ token( TK_AllGblError ); }}
goto st146;
tr319:
-#line 1021 "rlscan.rl"
+#line 1032 "rlscan.rl"
{te = p+1;{ token( TK_AllFromState ); }}
goto st146;
tr320:
-#line 1029 "rlscan.rl"
+#line 1040 "rlscan.rl"
{te = p+1;{ token( TK_AllEOF ); }}
goto st146;
tr321:
-#line 1056 "rlscan.rl"
+#line 1067 "rlscan.rl"
{te = p+1;{ token( TK_AllCond ); }}
goto st146;
tr322:
-#line 1045 "rlscan.rl"
+#line 1056 "rlscan.rl"
{te = p+1;{ token( TK_AllLocalError ); }}
goto st146;
tr323:
-#line 1013 "rlscan.rl"
+#line 1024 "rlscan.rl"
{te = p+1;{ token( TK_AllToState ); }}
goto st146;
tr324:
-#line 1038 "rlscan.rl"
+#line 1049 "rlscan.rl"
{te = p+1;{ token( TK_FinalGblError ); }}
goto st146;
tr325:
-#line 1022 "rlscan.rl"
+#line 1033 "rlscan.rl"
{te = p+1;{ token( TK_FinalFromState ); }}
goto st146;
tr326:
-#line 1030 "rlscan.rl"
+#line 1041 "rlscan.rl"
{te = p+1;{ token( TK_FinalEOF ); }}
goto st146;
tr327:
-#line 1057 "rlscan.rl"
+#line 1068 "rlscan.rl"
{te = p+1;{ token( TK_LeavingCond ); }}
goto st146;
tr328:
-#line 1046 "rlscan.rl"
+#line 1057 "rlscan.rl"
{te = p+1;{ token( TK_FinalLocalError ); }}
goto st146;
tr329:
-#line 1014 "rlscan.rl"
+#line 1025 "rlscan.rl"
{te = p+1;{ token( TK_FinalToState ); }}
goto st146;
tr330:
-#line 1060 "rlscan.rl"
+#line 1071 "rlscan.rl"
{te = p+1;{ token( TK_StarStar ); }}
goto st146;
tr331:
-#line 1061 "rlscan.rl"
+#line 1072 "rlscan.rl"
{te = p+1;{ token( TK_DashDash ); }}
goto st146;
tr332:
-#line 1062 "rlscan.rl"
+#line 1073 "rlscan.rl"
{te = p+1;{ token( TK_Arrow ); }}
goto st146;
tr333:
-#line 1059 "rlscan.rl"
+#line 1070 "rlscan.rl"
{te = p+1;{ token( TK_DotDot ); }}
goto st146;
tr334:
-#line 994 "rlscan.rl"
+#line 1005 "rlscan.rl"
{te = p;p--;{ token( TK_UInt, ts, te ); }}
goto st146;
tr336:
-#line 995 "rlscan.rl"
+#line 1006 "rlscan.rl"
{te = p;p--;{ token( TK_Hex, ts, te ); }}
goto st146;
tr337:
-#line 1073 "rlscan.rl"
+#line 1084 "rlscan.rl"
{te = p+1;{ token( TK_NameSep, ts, te ); }}
goto st146;
tr338:
-#line 1009 "rlscan.rl"
+#line 1020 "rlscan.rl"
{te = p+1;{ token( TK_ColonEquals ); }}
goto st146;
tr340:
-#line 1065 "rlscan.rl"
+#line 1076 "rlscan.rl"
{te = p;p--;{ token( TK_ColonGt ); }}
goto st146;
tr341:
-#line 1066 "rlscan.rl"
+#line 1077 "rlscan.rl"
{te = p+1;{ token( TK_ColonGtGt ); }}
goto st146;
tr342:
-#line 1039 "rlscan.rl"
+#line 1050 "rlscan.rl"
{te = p+1;{ token( TK_NotStartGblError ); }}
goto st146;
tr343:
-#line 1023 "rlscan.rl"
+#line 1034 "rlscan.rl"
{te = p+1;{ token( TK_NotStartFromState ); }}
goto st146;
tr344:
-#line 1031 "rlscan.rl"
+#line 1042 "rlscan.rl"
{te = p+1;{ token( TK_NotStartEOF ); }}
goto st146;
tr345:
-#line 1067 "rlscan.rl"
+#line 1078 "rlscan.rl"
{te = p+1;{ token( TK_LtColon ); }}
goto st146;
tr347:
-#line 1047 "rlscan.rl"
+#line 1058 "rlscan.rl"
{te = p+1;{ token( TK_NotStartLocalError ); }}
goto st146;
tr348:
-#line 1015 "rlscan.rl"
+#line 1026 "rlscan.rl"
{te = p+1;{ token( TK_NotStartToState ); }}
goto st146;
tr349:
-#line 1052 "rlscan.rl"
+#line 1063 "rlscan.rl"
{te = p;p--;{ token( TK_Middle ); }}
goto st146;
tr350:
-#line 1041 "rlscan.rl"
+#line 1052 "rlscan.rl"
{te = p+1;{ token( TK_MiddleGblError ); }}
goto st146;
tr351:
-#line 1025 "rlscan.rl"
+#line 1036 "rlscan.rl"
{te = p+1;{ token( TK_MiddleFromState ); }}
goto st146;
tr352:
-#line 1033 "rlscan.rl"
+#line 1044 "rlscan.rl"
{te = p+1;{ token( TK_MiddleEOF ); }}
goto st146;
tr353:
-#line 1049 "rlscan.rl"
+#line 1060 "rlscan.rl"
{te = p+1;{ token( TK_MiddleLocalError ); }}
goto st146;
tr354:
-#line 1017 "rlscan.rl"
+#line 1028 "rlscan.rl"
{te = p+1;{ token( TK_MiddleToState ); }}
goto st146;
tr355:
-#line 1063 "rlscan.rl"
+#line 1074 "rlscan.rl"
{te = p+1;{ token( TK_DoubleArrow ); }}
goto st146;
tr356:
-#line 1036 "rlscan.rl"
+#line 1047 "rlscan.rl"
{te = p+1;{ token( TK_StartGblError ); }}
goto st146;
tr357:
-#line 1020 "rlscan.rl"
+#line 1031 "rlscan.rl"
{te = p+1;{ token( TK_StartFromState ); }}
goto st146;
tr358:
-#line 1028 "rlscan.rl"
+#line 1039 "rlscan.rl"
{te = p+1;{ token( TK_StartEOF ); }}
goto st146;
tr359:
-#line 1055 "rlscan.rl"
+#line 1066 "rlscan.rl"
{te = p+1;{ token( TK_StartCond ); }}
goto st146;
tr360:
-#line 1044 "rlscan.rl"
+#line 1055 "rlscan.rl"
{te = p+1;{ token( TK_StartLocalError ); }}
goto st146;
tr361:
-#line 1012 "rlscan.rl"
+#line 1023 "rlscan.rl"
{te = p+1;{ token( TK_StartToState ); }}
goto st146;
tr362:
-#line 1040 "rlscan.rl"
+#line 1051 "rlscan.rl"
{te = p+1;{ token( TK_NotFinalGblError ); }}
goto st146;
tr363:
-#line 1024 "rlscan.rl"
+#line 1035 "rlscan.rl"
{te = p+1;{ token( TK_NotFinalFromState ); }}
goto st146;
tr364:
-#line 1032 "rlscan.rl"
+#line 1043 "rlscan.rl"
{te = p+1;{ token( TK_NotFinalEOF ); }}
goto st146;
tr365:
-#line 1048 "rlscan.rl"
+#line 1059 "rlscan.rl"
{te = p+1;{ token( TK_NotFinalLocalError ); }}
goto st146;
tr366:
-#line 1016 "rlscan.rl"
+#line 1027 "rlscan.rl"
{te = p+1;{ token( TK_NotFinalToState ); }}
goto st146;
tr367:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ switch( act ) {
case 88:
{{p = ((te))-1;} token( KW_Machine ); }
@@ -4432,30 +4443,30 @@ tr367:
}
goto st146;
tr368:
-#line 1001 "rlscan.rl"
+#line 1012 "rlscan.rl"
{te = p;p--;{ token( RE_SqOpen ); {stack[top++] = 146; goto st137;} }}
goto st146;
tr369:
-#line 1002 "rlscan.rl"
+#line 1013 "rlscan.rl"
{te = p+1;{ token( RE_SqOpenNeg ); {stack[top++] = 146; goto st137;} }}
goto st146;
tr370:
-#line 991 "rlscan.rl"
+#line 1002 "rlscan.rl"
{te = p;p--;{ token( TK_Word, ts, te ); }}
goto st146;
tr461:
-#line 1070 "rlscan.rl"
+#line 1081 "rlscan.rl"
{te = p+1;{ token( TK_BarStar ); }}
goto st146;
st146:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ts = 0;}
if ( ++p == pe )
goto _test_eof146;
case 146:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ts = p;}
-#line 4459 "rlscan.cpp"
+#line 4470 "rlscan.cpp"
switch( (*p) ) {
case 0: goto tr278;
case 9: goto st147;
@@ -4515,14 +4526,14 @@ case 147:
}
goto tr314;
tr281:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st148;
st148:
if ( ++p == pe )
goto _test_eof148;
case 148:
-#line 4526 "rlscan.cpp"
+#line 4537 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr47;
case 34: goto st149;
@@ -4530,7 +4541,7 @@ case 148:
}
goto st24;
tr47:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -4541,7 +4552,7 @@ st24:
if ( ++p == pe )
goto _test_eof24;
case 24:
-#line 4545 "rlscan.cpp"
+#line 4556 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr47;
case 34: goto st149;
@@ -4563,14 +4574,14 @@ case 25:
goto tr47;
goto st24;
tr282:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st150;
st150:
if ( ++p == pe )
goto _test_eof150;
case 150:
-#line 4574 "rlscan.cpp"
+#line 4585 "rlscan.cpp"
if ( (*p) == 10 )
goto tr51;
goto st26;
@@ -4608,14 +4619,14 @@ case 152:
}
goto tr315;
tr285:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st153;
st153:
if ( ++p == pe )
goto _test_eof153;
case 153:
-#line 4619 "rlscan.cpp"
+#line 4630 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr53;
case 39: goto st149;
@@ -4623,7 +4634,7 @@ case 153:
}
goto st27;
tr53:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -4634,7 +4645,7 @@ st27:
if ( ++p == pe )
goto _test_eof27;
case 27:
-#line 4638 "rlscan.cpp"
+#line 4649 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr53;
case 39: goto st149;
@@ -4672,14 +4683,14 @@ case 156:
goto tr333;
goto tr315;
tr290:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st157;
st157:
if ( ++p == pe )
goto _test_eof157;
case 157:
-#line 4683 "rlscan.cpp"
+#line 4694 "rlscan.cpp"
if ( (*p) == 120 )
goto st29;
if ( 48 <= (*p) && (*p) <= 57 )
@@ -4794,136 +4805,136 @@ case 166:
}
goto tr315;
tr297:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 991 "rlscan.rl"
+#line 1002 "rlscan.rl"
{act = 108;}
goto st167;
tr377:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 964 "rlscan.rl"
+#line 975 "rlscan.rl"
{act = 97;}
goto st167;
tr380:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 948 "rlscan.rl"
+#line 959 "rlscan.rl"
{act = 92;}
goto st167;
tr386:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 949 "rlscan.rl"
+#line 960 "rlscan.rl"
{act = 93;}
goto st167;
tr390:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 983 "rlscan.rl"
+#line 994 "rlscan.rl"
{act = 102;}
goto st167;
tr391:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 984 "rlscan.rl"
+#line 995 "rlscan.rl"
{act = 103;}
goto st167;
tr395:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 988 "rlscan.rl"
+#line 999 "rlscan.rl"
{act = 107;}
goto st167;
tr398:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 987 "rlscan.rl"
+#line 998 "rlscan.rl"
{act = 106;}
goto st167;
tr403:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 956 "rlscan.rl"
+#line 967 "rlscan.rl"
{act = 96;}
goto st167;
tr409:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 943 "rlscan.rl"
+#line 954 "rlscan.rl"
{act = 90;}
goto st167;
tr415:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 942 "rlscan.rl"
+#line 953 "rlscan.rl"
{act = 89;}
goto st167;
tr418:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 981 "rlscan.rl"
+#line 992 "rlscan.rl"
{act = 100;}
goto st167;
tr421:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 985 "rlscan.rl"
+#line 996 "rlscan.rl"
{act = 104;}
goto st167;
tr427:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 941 "rlscan.rl"
+#line 952 "rlscan.rl"
{act = 88;}
goto st167;
tr433:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 982 "rlscan.rl"
+#line 993 "rlscan.rl"
{act = 101;}
goto st167;
tr440:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 951 "rlscan.rl"
+#line 962 "rlscan.rl"
{act = 95;}
goto st167;
tr445:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 950 "rlscan.rl"
+#line 961 "rlscan.rl"
{act = 94;}
goto st167;
tr446:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 986 "rlscan.rl"
+#line 997 "rlscan.rl"
{act = 105;}
goto st167;
tr453:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 972 "rlscan.rl"
+#line 983 "rlscan.rl"
{act = 98;}
goto st167;
tr457:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 980 "rlscan.rl"
+#line 991 "rlscan.rl"
{act = 99;}
goto st167;
tr460:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
-#line 944 "rlscan.rl"
+#line 955 "rlscan.rl"
{act = 91;}
goto st167;
st167:
if ( ++p == pe )
goto _test_eof167;
case 167:
-#line 4927 "rlscan.cpp"
+#line 4938 "rlscan.cpp"
if ( (*p) == 95 )
goto tr297;
if ( (*p) < 65 ) {
@@ -6352,14 +6363,14 @@ case 251:
goto tr461;
goto tr315;
tr313:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st252;
st252:
if ( ++p == pe )
goto _test_eof252;
case 252:
-#line 6363 "rlscan.cpp"
+#line 6374 "rlscan.cpp"
if ( (*p) == 37 )
goto st30;
goto tr315;
@@ -6371,41 +6382,41 @@ case 30:
goto tr57;
goto tr45;
tr58:
-#line 1135 "rlscan.rl"
+#line 1146 "rlscan.rl"
{{p = ((te))-1;}{ pass( *ts, 0, 0 ); }}
goto st253;
tr61:
-#line 1119 "rlscan.rl"
+#line 1130 "rlscan.rl"
{te = p+1;{ pass( IMP_Literal, ts, te ); }}
goto st253;
tr64:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
line++;
}
-#line 1117 "rlscan.rl"
+#line 1128 "rlscan.rl"
{te = p+1;{ pass(); }}
goto st253;
tr463:
-#line 1135 "rlscan.rl"
+#line 1146 "rlscan.rl"
{te = p+1;{ pass( *ts, 0, 0 ); }}
goto st253;
tr464:
-#line 1134 "rlscan.rl"
+#line 1145 "rlscan.rl"
{te = p+1;}
goto st253;
tr474:
-#line 1133 "rlscan.rl"
+#line 1144 "rlscan.rl"
{te = p;p--;{ pass(); }}
goto st253;
tr475:
-#line 1135 "rlscan.rl"
+#line 1146 "rlscan.rl"
{te = p;p--;{ pass( *ts, 0, 0 ); }}
goto st253;
tr477:
-#line 1127 "rlscan.rl"
+#line 1138 "rlscan.rl"
{te = p;p--;{
updateCol();
singleLineSpec = true;
@@ -6414,7 +6425,7 @@ tr477:
}}
goto st253;
tr478:
-#line 1121 "rlscan.rl"
+#line 1132 "rlscan.rl"
{te = p+1;{
updateCol();
singleLineSpec = false;
@@ -6423,22 +6434,22 @@ tr478:
}}
goto st253;
tr479:
-#line 1116 "rlscan.rl"
+#line 1127 "rlscan.rl"
{te = p;p--;{ pass( IMP_UInt, ts, te ); }}
goto st253;
tr480:
-#line 1115 "rlscan.rl"
+#line 1126 "rlscan.rl"
{te = p;p--;{ pass( IMP_Word, ts, te ); }}
goto st253;
st253:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ts = 0;}
if ( ++p == pe )
goto _test_eof253;
case 253:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{ts = p;}
-#line 6442 "rlscan.cpp"
+#line 6453 "rlscan.cpp"
switch( (*p) ) {
case 0: goto tr464;
case 9: goto st254;
@@ -6461,7 +6472,7 @@ case 253:
goto st262;
goto tr463;
tr466:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -6472,7 +6483,7 @@ st254:
if ( ++p == pe )
goto _test_eof254;
case 254:
-#line 6476 "rlscan.cpp"
+#line 6487 "rlscan.cpp"
switch( (*p) ) {
case 9: goto st254;
case 10: goto tr466;
@@ -6480,14 +6491,14 @@ case 254:
}
goto tr474;
tr467:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st255;
st255:
if ( ++p == pe )
goto _test_eof255;
case 255:
-#line 6491 "rlscan.cpp"
+#line 6502 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr60;
case 34: goto tr61;
@@ -6495,7 +6506,7 @@ case 255:
}
goto st31;
tr60:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -6506,7 +6517,7 @@ st31:
if ( ++p == pe )
goto _test_eof31;
case 31:
-#line 6510 "rlscan.cpp"
+#line 6521 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr60;
case 34: goto tr61;
@@ -6521,14 +6532,14 @@ case 32:
goto tr60;
goto st31;
tr468:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st256;
st256:
if ( ++p == pe )
goto _test_eof256;
case 256:
-#line 6532 "rlscan.cpp"
+#line 6543 "rlscan.cpp"
if ( (*p) == 10 )
goto tr64;
goto st33;
@@ -6554,14 +6565,14 @@ case 258:
goto tr478;
goto tr477;
tr470:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st259;
st259:
if ( ++p == pe )
goto _test_eof259;
case 259:
-#line 6565 "rlscan.cpp"
+#line 6576 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr66;
case 39: goto tr61;
@@ -6569,7 +6580,7 @@ case 259:
}
goto st34;
tr66:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -6580,7 +6591,7 @@ st34:
if ( ++p == pe )
goto _test_eof34;
case 34:
-#line 6584 "rlscan.cpp"
+#line 6595 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr66;
case 39: goto tr61;
@@ -6595,14 +6606,14 @@ case 35:
goto tr66;
goto st34;
tr471:
-#line 1 "rlscan.rl"
+#line 1 "NONE"
{te = p+1;}
goto st260;
st260:
if ( ++p == pe )
goto _test_eof260;
case 260:
-#line 6606 "rlscan.cpp"
+#line 6617 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr69;
case 47: goto tr61;
@@ -6610,7 +6621,7 @@ case 260:
}
goto st36;
tr69:
-#line 630 "rlscan.rl"
+#line 641 "rlscan.rl"
{
lastnl = p;
column = 0;
@@ -6621,7 +6632,7 @@ st36:
if ( ++p == pe )
goto _test_eof36;
case 36:
-#line 6625 "rlscan.cpp"
+#line 6636 "rlscan.cpp"
switch( (*p) ) {
case 10: goto tr69;
case 47: goto tr61;
@@ -7185,7 +7196,7 @@ case 262:
_out: {}
}
-#line 1230 "rlscan.rl"
+#line 1241 "rlscan.rl"
/* Check if we failed. */
if ( cs == rlscan_error ) {
diff --git a/ragel/rlscan.rl b/ragel/rlscan.rl
index 68c9c22..a676b7e 100644
--- a/ragel/rlscan.rl
+++ b/ragel/rlscan.rl
@@ -1,5 +1,6 @@
/*
* Copyright 2006-2007 Adrian Thurston <thurston@complang.org>
+ * Copyright 2011 Josef Goettgens
*/
/* This file is part of Ragel.
@@ -613,6 +614,16 @@ ifstream *Scanner::tryOpenInclude( char **pathChecks, long &found )
found = check - pathChecks;
return inFile;
}
+
+ /*
+ * 03/26/2011 jg:
+ * Don't rely on sloppy runtime behaviour: reset the state of the stream explicitly.
+ * If inFile->open() fails, which happens when include dirs are tested, the fail bit
+ * is set by the runtime library. Currently the VS runtime library opens new files,
+ * but when it comes to reading it refuses to work.
+ */
+ inFile->clear();
+
check += 1;
}
diff --git a/ragel/rubycodegen.cpp b/ragel/rubycodegen.cpp
index 5117823..ff25ada 100644
--- a/ragel/rubycodegen.cpp
+++ b/ragel/rubycodegen.cpp
@@ -58,6 +58,7 @@ using std::endl;
extern CodeStyle codeStyle;
extern int numSplitPartitions;
+extern bool noLineDirectives;
/*
* Callbacks invoked by the XML data parser.
@@ -66,6 +67,9 @@ extern int numSplitPartitions;
void rubyLineDirective( ostream &out, const char *fileName, int line )
{
+ if ( noLineDirectives )
+ return;
+
/* Write a comment containing line info. */
out << "# line " << line << " \"";
for ( const char *pc = fileName; *pc != 0; pc++ ) {
@@ -307,8 +311,9 @@ string RubyCodeGen::GET_KEY()
ret << ")";
}
else {
- /* Expression for retrieving the key, use simple dereference. */
- ret << DATA() << "[" << P() << "]";
+ /* Expression for retrieving the key, use dereference and read ordinal,
+ * for compatibility with Ruby 1.9. */
+ ret << DATA() << "[" << P() << "].ord";
}
return ret.str();
}
diff --git a/ragel/version.h b/ragel/version.h
new file mode 100644
index 0000000..92531c2
--- /dev/null
+++ b/ragel/version.h
@@ -0,0 +1,2 @@
+#define VERSION "6.8"
+#define PUBDATE "Feb 2013"
diff --git a/ragel/xmlcodegen.cpp b/ragel/xmlcodegen.cpp
index 9a9c388..e4b14bc 100644
--- a/ragel/xmlcodegen.cpp
+++ b/ragel/xmlcodegen.cpp
@@ -1403,9 +1403,12 @@ void InputData::writeLanguage( std::ostream &out )
switch ( hostLang->lang ) {
case HostLang::C: out << "C"; break;
case HostLang::D: out << "D"; break;
+ case HostLang::D2: out << "D2"; break;
+ case HostLang::Go: out << "Go"; break;
case HostLang::Java: out << "Java"; break;
case HostLang::Ruby: out << "Ruby"; break;
case HostLang::CSharp: out << "C#"; break;
+ case HostLang::OCaml: out << "OCaml"; break;
}
out << "\"";
}
diff --git a/ragel/xmlparse.kh b/ragel/xmlparse.kh
deleted file mode 100644
index 47b2758..0000000
--- a/ragel/xmlparse.kh
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Copyright 2001-2007 Adrian Thurston <thurston@complang.org>
- */
-
-/* This file is part of Ragel.
- *
- * Ragel is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Ragel 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 Ragel; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-#ifndef _XMLPARSE_H
-#define _XMLPARSE_H
-
-#include "vector.h"
-#include "gendata.h"
-#include "buffer.h"
-#include <iostream>
-
-using std::istream;
-using std::ostream;
-
-#define XML_BUFSIZE 4096
-
-struct AttrMarker
-{
- char *id;
- int idLen;
- char *value;
- int valueLen;
-};
-
-struct Attribute
-{
- char *id;
- char *value;
-};
-
-typedef Vector<AttrMarker> AttrMkList;
-typedef Vector<Attribute> AttrList;
-struct XMLTagHashPair;
-
-struct XMLTag
-{
- enum TagType { Open, Close };
-
- XMLTag( XMLTagHashPair *tagId, TagType type ) :
- tagId(tagId), type(type),
- content(0), attrList(0) {}
-
- Attribute *findAttr( const char *id )
- {
- if ( attrList != 0 ) {
- for ( AttrList::Iter attr = *attrList; attr.lte(); attr++ ) {
- if ( strcmp( id, attr->id ) == 0 )
- return attr;
- }
- }
- return 0;
- }
-
- XMLTagHashPair *tagId;
- TagType type;
-
- /* Content is associtated with closing tags. */
- char *content;
-
- /* Attribute lists are associated with opening tags. */
- AttrList *attrList;
-};
-
-
-struct XMLTagHashPair
-{
- const char *name;
- int id;
-};
-
-struct Token;
-
-struct GenInlineItem;
-struct GenInlineList;
-
-struct LmSwitchVect;
-struct LmSwitchAction;
-
-struct XmlScanner
-{
- XmlScanner( const char *fileName, istream &input );
-
- int scan();
- void adjustAttrPointers( int distance );
- std::ostream &error();
-
- const char *fileName;
- istream &input;
-
- /* Scanner State. */
- int cs, act, have, curline, curcol;
- char *ts, *te;
- char *p, *pe;
- int done;
-
- /* Token data */
- char *data;
- int data_len;
- int value;
- AttrMkList attrMkList;
- Buffer buffer;
- char *tag_id_start;
- int tag_id_len;
- int token_col, token_line;
-
- char buf[XML_BUFSIZE];
-};
-
-
-struct XmlParser
-{
- %%{
- parser XmlParser;
-
- token TAG_unknown, TAG_ragel, TAG_ragel_def, TAG_host, TAG_state_list,
- TAG_state, TAG_trans_list, TAG_t, TAG_machine, TAG_start_state,
- TAG_error_state, TAG_action_list, TAG_action_table_list,
- TAG_action, TAG_action_table, TAG_alphtype, TAG_element,
- TAG_getkey, TAG_state_actions, TAG_entry_points, TAG_sub_action,
- TAG_cond_space_list, TAG_cond_space, TAG_cond_list, TAG_c,
- TAG_exports, TAG_ex;
-
- # Inline block tokens.
- token TAG_text, TAG_goto, TAG_call, TAG_next, TAG_goto_expr,
- TAG_call_expr, TAG_next_expr, TAG_ret, TAG_pchar, TAG_char,
- TAG_hold, TAG_exec, TAG_curs, TAG_targs, TAG_entry, TAG_data,
- TAG_lm_switch, TAG_init_act, TAG_set_act, TAG_set_tokend,
- TAG_get_tokend, TAG_init_tokstart, TAG_set_tokstart;
-
- token TAG_write, TAG_access, TAG_break, TAG_arg, TAG_cs_expr;
-
- token TAG_p_expr, TAG_pe_expr, TAG_eof_expr, TAG_cs_expr, TAG_top_expr,
- TAG_stack_expr, TAG_act_expr, TAG_tokstart_expr, TAG_tokend_expr,
- TAG_data_expr, TAG_prepush, TAG_postpop, TAG_eof_t;
- }%%
-
- %% write instance_data;
-
- void init();
- int parseLangEl( int type, const Token *token );
-
- XmlParser( const char *sourceFileName, const char *xmlFileName, bool outputActive, bool wantComplete ) :
- sourceFileName(sourceFileName),
- fileName(xmlFileName),
- outStream(0),
- outputActive(outputActive),
- wantComplete(wantComplete),
- cgd(0) { }
-
- int token( int tokenId, Token &token );
- int token( int tokenId, int col, int line );
- int token( XMLTag *tag, int col, int line );
-
- void openOutput();
-
- /* Report an error encountered by the parser. */
- ostream &warning( const InputLoc &loc );
- ostream &error();
- ostream &error( const InputLoc &loc );
- ostream &parser_error( int tokId, Token &token );
- ostream &source_error( const InputLoc &loc );
-
- /* The name of the root section, this does not change during an include. */
- const char *sourceFileName;
- const char *fileName;
- ostream *outStream;
- bool outputActive;
- bool wantComplete;
-
- /* Collected during parsing. */
- char *attrKey;
- char *attrValue;
- int curAction;
- int curActionTable;
- int curTrans;
- int curState;
- int curCondSpace;
- int curStateCond;
-
- CodeGenData *cgd;
- CodeGenMap codeGenMap;
-
- Vector <char*> writeOptions;
-};
-
-%% write token_defs;
-
-int xml_parse( std::istream &input, const char *fileName,
- bool outputActive, bool wantComplete,
- XmlScanner &scanner, XmlParser &parser );
-
-#endif
diff --git a/ragel/xmlparse.kl b/ragel/xmlparse.kl
deleted file mode 100644
index 2dc572d..0000000
--- a/ragel/xmlparse.kl
+++ /dev/null
@@ -1,1006 +0,0 @@
-/*
- * Copyright 2001-2007 Adrian Thurston <thurston@complang.org>
- */
-
-/* This file is part of Ragel.
- *
- * Ragel is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Ragel 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 Ragel; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include "xmlparse.h"
-#include "common.h"
-#include "gendata.h"
-#include "version.h"
-#include <iostream>
-#include <stdlib.h>
-
-using std::cout;
-using std::ostream;
-using std::istream;
-using std::cerr;
-using std::endl;
-
-Key readKey( char *td, char **end );
-long readOffsetPtr( char *td, char **end );
-unsigned long readLength( char *td );
-
-struct Token
-{
- XMLTag *tag;
- InputLoc loc;
-};
-
-%%{
-
-parser XmlParser;
-
-include "xmlparse.kh";
-
-start: tag_ragel;
-start:
- final {
- /* If we get no input the assumption is that the frontend died and
- * emitted an error. This forces the backend to return a non-zero
- * exit status, but does not print an error. */
- gblErrorCount += 1;
- };
-
-tag_ragel: tag_ragel_head ragel_def_list host_or_write_list '/' TAG_ragel;
-
-tag_ragel_head: TAG_ragel
- final {
- /* Check version used to generated the intermediate file. */
- Attribute *versionAttr = $1->tag->findAttr( "version" );
- if ( versionAttr == 0 )
- error($1->loc) << "tag <ragel> requires a version attribute" << endp;
- if ( strcmp( versionAttr->value, VERSION ) != 0 )
- error($1->loc) << "version mismatch between frontend and backend" << endp;
-
- /* Check for file name attribute. */
- Attribute *fileNameAttr = $1->tag->findAttr( "filename" );
- if ( fileNameAttr == 0 )
- error($1->loc) << "tag <ragel> requires a filename attribute" << endp;
- sourceFileName = fileNameAttr->value;
-
- /* Check for language attribute. */
- Attribute *langAttr = $1->tag->findAttr( "lang" );
- if ( langAttr == 0 )
- error($1->loc) << "tag <ragel> requires a lang attribute" << endp;
-
- if ( generateDot )
- outStream = dotOpenOutput( sourceFileName );
- else if ( strcmp( langAttr->value, "C" ) == 0 ) {
- hostLang = &hostLangC;
- outStream = cdOpenOutput( sourceFileName );
- }
- else if ( strcmp( langAttr->value, "D" ) == 0 ) {
- hostLang = &hostLangD;
- outStream = cdOpenOutput( sourceFileName );
- }
- else if ( strcmp( langAttr->value, "Java" ) == 0 ) {
- hostLang = &hostLangJava;
- outStream = javaOpenOutput( sourceFileName );
- }
- else if ( strcmp( langAttr->value, "Ruby" ) == 0 ) {
- hostLang = &hostLangRuby;
- outStream = rubyOpenOutput( sourceFileName );
- }
- else if ( strcmp( langAttr->value, "C#" ) == 0 ) {
- hostLang = &hostLangCSharp;
- outStream = csharpOpenOutput( sourceFileName );
- }
- else {
- error($1->loc) << "expecting lang attribute to be "
- "one of C, D, Java, Ruby or C#" << endp;
- }
- };
-
-ragel_def_list: ragel_def_list ragel_def;
-ragel_def_list: ;
-
-host_or_write_list: host_or_write_list host_or_write;
-host_or_write_list: ;
-
-host_or_write: tag_host;
-host_or_write: tag_write;
-
-tag_host:
- TAG_host '/' TAG_host
- final {
- Attribute *lineAttr = $1->tag->findAttr( "line" );
- if ( lineAttr == 0 )
- error($1->loc) << "tag <host> requires a line attribute" << endp;
- else {
- int line = atoi( lineAttr->value );
- if ( outputActive )
- lineDirective( *outStream, sourceFileName, line );
- }
-
- if ( outputActive )
- *outStream << $3->tag->content;
- };
-
-ragel_def:
- tag_ragel_def_head ragel_def_item_list '/' TAG_ragel_def
- final {
- /* Do this before distributing transitions out to singles and defaults
- * makes life easier. */
- cgd->redFsm->maxKey = cgd->findMaxKey();
-
- cgd->redFsm->assignActionLocs();
-
- /* Find the first final state (The final state with the lowest id). */
- cgd->redFsm->findFirstFinState();
-
- /* Call the user's callback. */
- cgd->finishRagelDef();
- };
-
-tag_ragel_def_head: TAG_ragel_def
- final {
- char *fsmName = 0;
- Attribute *nameAttr = $1->tag->findAttr( "name" );
- if ( nameAttr != 0 ) {
- fsmName = nameAttr->value;
-
- CodeGenMapEl *mapEl = codeGenMap.find( fsmName );
- if ( mapEl != 0 )
- cgd = mapEl->value;
- else {
- cgd = makeCodeGen( sourceFileName, fsmName, *outStream, wantComplete );
- codeGenMap.insert( fsmName, cgd );
- }
- }
- else {
- cgd = makeCodeGen( sourceFileName, fsmName,
- *outStream, wantComplete );
- }
-
- ::keyOps = &cgd->thisKeyOps;
- };
-
-ragel_def_item_list: ragel_def_item_list ragel_def_item;
-ragel_def_item_list: ;
-
-ragel_def_item: tag_alph_type;
-ragel_def_item: tag_getkey_expr;
-ragel_def_item: tag_access_expr;
-ragel_def_item: tag_prepush_expr;
-ragel_def_item: tag_postpop_expr;
-ragel_def_item: tag_export_list;
-ragel_def_item: tag_machine;
-ragel_def_item: tag_p_expr;
-ragel_def_item: tag_pe_expr;
-ragel_def_item: tag_eof_expr;
-ragel_def_item: tag_cs_expr;
-ragel_def_item: tag_top_expr;
-ragel_def_item: tag_stack_expr;
-ragel_def_item: tag_act_expr;
-ragel_def_item: tag_tokstart_expr;
-ragel_def_item: tag_tokend_expr;
-ragel_def_item: tag_data_expr;
-
-tag_export_list: TAG_exports export_list '/' TAG_exports;
-
-export_list: export_list tag_export;
-export_list: ;
-
-tag_export: TAG_ex '/' TAG_ex
- final {
- Attribute *nameAttr = $1->tag->findAttr( "name" );
- if ( nameAttr == 0 )
- error($1->loc) << "tag <ex> requires a name attribute" << endp;
- else {
- char *td = $3->tag->content;
- Key exportKey = readKey( td, &td );
- cgd->exportList.append( new Export( nameAttr->value, exportKey ) );
- }
- };
-
-tag_alph_type: TAG_alphtype '/' TAG_alphtype
- final {
- if ( ! cgd->setAlphType( $3->tag->content ) )
- error($1->loc) << "tag <alphtype> specifies unknown alphabet type" << endp;
- };
-
-tag_getkey_expr: TAG_getkey inline_list '/' TAG_getkey
- final {
- cgd->getKeyExpr = $2->inlineList;
- };
-
-tag_access_expr: TAG_access inline_list '/' TAG_access
- final {
- cgd->accessExpr = $2->inlineList;
- };
-
-tag_prepush_expr: TAG_prepush inline_list '/' TAG_prepush
- final {
- cgd->prePushExpr = $2->inlineList;
- };
-
-tag_postpop_expr: TAG_postpop inline_list '/' TAG_postpop
- final {
- cgd->postPopExpr = $2->inlineList;
- };
-
-tag_p_expr: TAG_p_expr inline_list '/' TAG_p_expr
- final { cgd->pExpr = $2->inlineList; };
-tag_pe_expr: TAG_pe_expr inline_list '/' TAG_pe_expr
- final { cgd->peExpr = $2->inlineList; };
-tag_eof_expr: TAG_eof_expr inline_list '/' TAG_eof_expr
- final { cgd->eofExpr = $2->inlineList; };
-tag_cs_expr: TAG_cs_expr inline_list '/' TAG_cs_expr
- final { cgd->csExpr = $2->inlineList; };
-tag_top_expr: TAG_top_expr inline_list '/' TAG_top_expr
- final { cgd->topExpr = $2->inlineList; };
-tag_stack_expr: TAG_stack_expr inline_list '/' TAG_stack_expr
- final { cgd->stackExpr = $2->inlineList; };
-tag_act_expr: TAG_act_expr inline_list '/' TAG_act_expr
- final { cgd->actExpr = $2->inlineList; };
-tag_tokstart_expr: TAG_tokstart_expr inline_list '/' TAG_tokstart_expr
- final { cgd->tokstartExpr = $2->inlineList; };
-tag_tokend_expr: TAG_tokend_expr inline_list '/' TAG_tokend_expr
- final { cgd->tokendExpr = $2->inlineList; };
-tag_data_expr: TAG_data_expr inline_list '/' TAG_data_expr
- final { cgd->dataExpr = $2->inlineList; };
-
-
-tag_write: tag_write_head write_option_list '/' TAG_write
- final {
- /* Terminate the options list and call the write statement handler. */
- writeOptions.append(0);
- cgd->writeStatement( $1->loc, writeOptions.length()-1, writeOptions.data );
-
- /* Clear the options in prep for the next write statement. */
- writeOptions.empty();
- };
-
-nonterm tag_write_head
-{
- InputLoc loc;
-};
-
-tag_write_head: TAG_write
- final {
- Attribute *nameAttr = $1->tag->findAttr( "def_name" );
- Attribute *lineAttr = $1->tag->findAttr( "line" );
- Attribute *colAttr = $1->tag->findAttr( "col" );
-
- if ( nameAttr == 0 )
- error($1->loc) << "tag <write> requires a def_name attribute" << endp;
- if ( lineAttr == 0 )
- error($1->loc) << "tag <write> requires a line attribute" << endp;
- if ( colAttr == 0 )
- error($1->loc) << "tag <write> requires a col attribute" << endp;
-
- if ( nameAttr != 0 && lineAttr != 0 && colAttr != 0 ) {
- $$->loc.line = atoi(lineAttr->value);
- $$->loc.col = atoi(colAttr->value);
-
- CodeGenMapEl *mapEl = codeGenMap.find( nameAttr->value );
- if ( mapEl == 0 ) {
- source_error($$->loc) << "write statement given "
- "but there are no machine instantiations" << endp;
- }
- else {
- cgd = mapEl->value;
- ::keyOps = &cgd->thisKeyOps;
- }
- }
- };
-
-
-write_option_list: write_option_list tag_arg;
-write_option_list: ;
-
-nonterm tag_arg
-{
- char *option;
-};
-
-tag_arg: TAG_arg '/' TAG_arg
- final {
- writeOptions.append( $3->tag->content );
- };
-
-tag_machine: tag_machine_head machine_item_list '/' TAG_machine
- final {
- cgd->closeMachine();
- };
-
-tag_machine_head: TAG_machine
- final {
- cgd->createMachine();
- };
-
-machine_item_list: machine_item_list machine_item;
-machine_item_list: ;
-
-machine_item: tag_start_state;
-machine_item: tag_error_state;
-machine_item: tag_entry_points;
-machine_item: tag_state_list;
-machine_item: tag_action_list;
-machine_item: tag_action_table_list;
-machine_item: tag_cond_space_list;
-
-#
-# States.
-#
-
-tag_start_state: TAG_start_state '/' TAG_start_state
- final {
- unsigned long startState = strtoul( $3->tag->content, 0, 10 );
- cgd->setStartState( startState );
- };
-
-tag_error_state: TAG_error_state '/' TAG_error_state
- final {
- unsigned long errorState = strtoul( $3->tag->content, 0, 10 );
- cgd->setErrorState( errorState );
- };
-
-tag_entry_points: TAG_entry_points entry_point_list '/' TAG_entry_points
- final {
- Attribute *errorAttr = $1->tag->findAttr( "error" );
- if ( errorAttr != 0 )
- cgd->setForcedErrorState();
- };
-
-entry_point_list: entry_point_list tag_entry;
-entry_point_list: ;
-
-tag_entry: TAG_entry '/' TAG_entry
- final {
- Attribute *nameAttr = $1->tag->findAttr( "name" );
- if ( nameAttr == 0 ) {
- error($1->loc) << "tag <entry_points>::<entry> "
- "requires a name attribute" << endp;
- }
- else {
- char *data = $3->tag->content;
- unsigned long entry = strtoul( data, &data, 10 );
- cgd->addEntryPoint( nameAttr->value, entry );
- }
- };
-
-tag_state_list: tag_state_list_head state_list '/' TAG_state_list;
-
-tag_state_list_head: TAG_state_list
- final {
- Attribute *lengthAttr = $1->tag->findAttr( "length" );
- if ( lengthAttr == 0 )
- error($1->loc) << "tag <state_list> requires a length attribute" << endp;
- else {
- unsigned long length = strtoul( lengthAttr->value, 0, 10 );
- cgd->initStateList( length );
- curState = 0;
- }
- };
-
-state_list: state_list tag_state;
-state_list: ;
-
-tag_state: TAG_state state_item_list '/' TAG_state
- final {
- Attribute *idAttr = $1->tag->findAttr( "id" );
- if ( idAttr == 0 )
- error($1->loc) << "tag <state> requires an id attribute" << endp;
- else {
- int id = atoi( idAttr->value );
- cgd->setId( curState, id );
- }
-
- Attribute *lengthAttr = $1->tag->findAttr( "final" );
- if ( lengthAttr != 0 )
- cgd->setFinal( curState );
- curState += 1;
- };
-
-state_item_list: state_item_list state_item;
-state_item_list: ;
-
-state_item: tag_state_actions;
-state_item: tag_eof_t;
-state_item: tag_state_cond_list;
-state_item: tag_trans_list;
-
-tag_state_actions: TAG_state_actions '/' TAG_state_actions
- final {
- char *ad = $3->tag->content;
-
- long toStateAction = readOffsetPtr( ad, &ad );
- long fromStateAction = readOffsetPtr( ad, &ad );
- long eofAction = readOffsetPtr( ad, &ad );
-
- cgd->setStateActions( curState, toStateAction,
- fromStateAction, eofAction );
- };
-
-tag_eof_t: TAG_eof_t '/' TAG_eof_t
- final {
- char *et = $3->tag->content;
- long targ = readOffsetPtr( et, &et );
- long eofAction = readOffsetPtr( et, &et );
-
- cgd->setEofTrans( curState, targ, eofAction );
- };
-
-tag_state_cond_list: tag_state_cond_list_head state_cond_list '/' TAG_cond_list;
-
-tag_state_cond_list_head: TAG_cond_list
- final {
- Attribute *lengthAttr = $1->tag->findAttr( "length" );
- if ( lengthAttr == 0 )
- error($1->loc) << "tag <cond_list> requires a length attribute" << endp;
- else {
- ulong length = readLength( lengthAttr->value );
- cgd->initStateCondList( curState, length );
- curStateCond = 0;
- }
- };
-
-state_cond_list: state_cond_list state_cond;
-state_cond_list: ;
-
-state_cond: TAG_c '/' TAG_c
- final {
- char *td = $3->tag->content;
- Key lowKey = readKey( td, &td );
- Key highKey = readKey( td, &td );
- long condId = readOffsetPtr( td, &td );
- cgd->addStateCond( curState, lowKey, highKey, condId );
- };
-
-tag_trans_list: tag_trans_list_head trans_list '/' TAG_trans_list
- final {
- cgd->finishTransList( curState );
- };
-
-tag_trans_list_head: TAG_trans_list
- final {
- Attribute *lengthAttr = $1->tag->findAttr( "length" );
- if ( lengthAttr == 0 )
- error($1->loc) << "tag <trans_list> requires a length attribute" << endp;
- else {
- unsigned long length = strtoul( lengthAttr->value, 0, 10 );
- cgd->initTransList( curState, length );
- curTrans = 0;
- }
- };
-
-trans_list: trans_list tag_trans;
-trans_list: ;
-
-tag_trans: TAG_t '/' TAG_t
- final {
- char *td = $3->tag->content;
- Key lowKey = readKey( td, &td );
- Key highKey = readKey( td, &td );
- long targ = readOffsetPtr( td, &td );
- long action = readOffsetPtr( td, &td );
-
- cgd->newTrans( curState, curTrans++, lowKey, highKey, targ, action );
- };
-
-#
-# Action Lists.
-#
-
-tag_action_list: tag_action_list_head action_list '/' TAG_action_list;
-
-tag_action_list_head: TAG_action_list
- final {
- Attribute *lengthAttr = $1->tag->findAttr( "length" );
- if ( lengthAttr == 0 )
- error($1->loc) << "tag <action_list> requires a length attribute" << endp;
- else {
- unsigned long length = strtoul( lengthAttr->value, 0, 10 );
- cgd->initActionList( length );
- curAction = 0;
- }
- };
-
-action_list: action_list tag_action;
-action_list: ;
-
-#
-# Actions.
-#
-
-tag_action: TAG_action inline_list '/' TAG_action
- final {
- Attribute *lineAttr = $1->tag->findAttr( "line" );
- Attribute *colAttr = $1->tag->findAttr( "col" );
- Attribute *nameAttr = $1->tag->findAttr( "name" );
- if ( lineAttr == 0 || colAttr == 0)
- error($1->loc) << "tag <action> requires a line and col attributes" << endp;
- else {
- unsigned long line = strtoul( lineAttr->value, 0, 10 );
- unsigned long col = strtoul( colAttr->value, 0, 10 );
-
- char *name = 0;
- if ( nameAttr != 0 )
- name = nameAttr->value;
-
- cgd->newAction( curAction++, name, line, col, $2->inlineList );
- }
- };
-
-nonterm inline_list
-{
- GenInlineList *inlineList;
-};
-
-
-inline_list: inline_list inline_item
- final {
- /* Append the item to the list, return the list. */
- $1->inlineList->append( $2->inlineItem );
- $$->inlineList = $1->inlineList;
- };
-
-inline_list:
- final {
- /* Start with empty list. */
- $$->inlineList = new GenInlineList;
- };
-
-nonterm inline_item_type
-{
- GenInlineItem *inlineItem;
-};
-
-nonterm inline_item uses inline_item_type;
-
-inline_item: tag_text final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_goto final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_call final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_next final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_goto_expr final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_call_expr final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_next_expr final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_ret final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_break final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_pchar final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_char final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_hold final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_exec final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_curs final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_targs final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_il_entry final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_init_tokstart final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_init_act final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_get_tokend final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_set_tokstart final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_set_tokend final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_set_act final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_sub_action final { $$->inlineItem = $1->inlineItem; };
-inline_item: tag_lm_switch final { $$->inlineItem = $1->inlineItem; };
-
-nonterm tag_text uses inline_item_type;
-nonterm tag_goto uses inline_item_type;
-nonterm tag_call uses inline_item_type;
-nonterm tag_next uses inline_item_type;
-nonterm tag_goto_expr uses inline_item_type;
-nonterm tag_call_expr uses inline_item_type;
-nonterm tag_next_expr uses inline_item_type;
-nonterm tag_ret uses inline_item_type;
-nonterm tag_break uses inline_item_type;
-nonterm tag_pchar uses inline_item_type;
-nonterm tag_char uses inline_item_type;
-nonterm tag_hold uses inline_item_type;
-nonterm tag_exec uses inline_item_type;
-nonterm tag_curs uses inline_item_type;
-nonterm tag_targs uses inline_item_type;
-nonterm tag_il_entry uses inline_item_type;
-nonterm tag_init_tokstart uses inline_item_type;
-nonterm tag_init_act uses inline_item_type;
-nonterm tag_get_tokend uses inline_item_type;
-nonterm tag_set_tokstart uses inline_item_type;
-nonterm tag_set_tokend uses inline_item_type;
-nonterm tag_set_act uses inline_item_type;
-nonterm tag_sub_action uses inline_item_type;
-nonterm tag_lm_switch uses inline_item_type;
-
-tag_text: TAG_text '/' TAG_text
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::Text );
- $$->inlineItem->data = $3->tag->content;
- };
-
-tag_goto: TAG_goto '/' TAG_goto
- final {
- int targ = strtol( $3->tag->content, 0, 10 );
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::Goto );
- $$->inlineItem->targId = targ;
- };
-
-tag_call: TAG_call '/' TAG_call
- final {
- int targ = strtol( $3->tag->content, 0, 10 );
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::Call );
- $$->inlineItem->targId = targ;
- };
-
-tag_next: TAG_next '/' TAG_next
- final {
- int targ = strtol( $3->tag->content, 0, 10 );
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::Next );
- $$->inlineItem->targId = targ;
- };
-
-tag_goto_expr: TAG_goto_expr inline_list '/' TAG_goto_expr
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::GotoExpr );
- $$->inlineItem->children = $2->inlineList;
- };
-
-tag_call_expr: TAG_call_expr inline_list '/' TAG_call_expr
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::CallExpr );
- $$->inlineItem->children = $2->inlineList;
- };
-
-tag_next_expr: TAG_next_expr inline_list '/' TAG_next_expr
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::NextExpr );
- $$->inlineItem->children = $2->inlineList;
- };
-
-tag_ret: TAG_ret '/' TAG_ret
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::Ret );
- };
-
-tag_break: TAG_break '/' TAG_break
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::Break );
- };
-
-tag_pchar: TAG_pchar '/' TAG_pchar
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::PChar );
- };
-
-tag_char: TAG_char '/' TAG_char
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::Char );
- };
-
-tag_hold: TAG_hold '/' TAG_hold
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::Hold );
- };
-
-tag_exec: TAG_exec inline_list '/' TAG_exec
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::Exec );
- $$->inlineItem->children = $2->inlineList;
- };
-
-tag_curs: TAG_curs '/' TAG_curs
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::Curs );
- };
-
-tag_targs: TAG_targs '/' TAG_targs
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::Targs );
- };
-
-tag_il_entry: TAG_entry '/' TAG_entry
- final {
- int targ = strtol( $3->tag->content, 0, 10 );
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::Entry );
- $$->inlineItem->targId = targ;
- };
-
-tag_init_tokstart: TAG_init_tokstart '/' TAG_init_tokstart
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::LmInitTokStart );
- };
-
-tag_init_act: TAG_init_act '/' TAG_init_act
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::LmInitAct );
- };
-
-tag_get_tokend: TAG_get_tokend '/' TAG_get_tokend
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::LmGetTokEnd );
- };
-
-tag_set_tokstart: TAG_set_tokstart '/' TAG_set_tokstart
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::LmSetTokStart );
- cgd->hasLongestMatch = true;
- };
-
-tag_set_tokend: TAG_set_tokend '/' TAG_set_tokend
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::LmSetTokEnd );
- $$->inlineItem->offset = strtol( $3->tag->content, 0, 10 );
- };
-
-tag_set_act: TAG_set_act '/' TAG_set_act
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::LmSetActId );
- $$->inlineItem->lmId = strtol( $3->tag->content, 0, 10 );
- };
-
-tag_sub_action: TAG_sub_action inline_list '/' TAG_sub_action
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::SubAction );
- $$->inlineItem->children = $2->inlineList;
- };
-
-# Action switches.
-tag_lm_switch: TAG_lm_switch lm_action_list '/' TAG_lm_switch
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::LmSwitch );
- $$->inlineItem->children = $2->inlineList;
- };
-
-nonterm lm_action_list
-{
- GenInlineList *inlineList;
-};
-
-lm_action_list: lm_action_list tag_inline_action
- final {
- $$->inlineList = $1->inlineList;
- $$->inlineList->append( $2->inlineItem );
- };
-lm_action_list:
- final {
- $$->inlineList = new GenInlineList;
- };
-
-nonterm tag_inline_action uses inline_item_type;
-
-tag_inline_action: TAG_sub_action inline_list '/' TAG_sub_action
- final {
- $$->inlineItem = new GenInlineItem( InputLoc(), GenInlineItem::SubAction );
- $$->inlineItem->children = $2->inlineList;
-
- Attribute *idAttr = $1->tag->findAttr( "id" );
- if ( idAttr != 0 ) {
- unsigned long id = strtoul( idAttr->value, 0, 10 );
- $$->inlineItem->lmId = id;
- }
- };
-
-#
-# Lists of Actions.
-#
-
-tag_action_table_list:
- tag_action_table_list_head action_table_list '/' TAG_action_table_list;
-
-tag_action_table_list_head: TAG_action_table_list
- final {
- Attribute *lengthAttr = $1->tag->findAttr( "length" );
- if ( lengthAttr == 0 ) {
- error($1->loc) << "tag <action_table_list> requires "
- "a length attribute" << endp;
- }
- else {
- unsigned long length = strtoul( lengthAttr->value, 0, 10 );
- cgd->initActionTableList( length );
- curActionTable = 0;
- }
- };
-
-action_table_list: action_table_list tag_action_table;
-action_table_list: ;
-
-tag_action_table: TAG_action_table '/' TAG_action_table
- final {
- /* Find the length of the action table. */
- Attribute *lengthAttr = $1->tag->findAttr( "length" );
- if ( lengthAttr == 0 )
- error($1->loc) << "tag <at> requires a length attribute" << endp;
- else {
- unsigned long length = strtoul( lengthAttr->value, 0, 10 );
-
- /* Collect the action table. */
- RedAction *redAct = cgd->allActionTables + curActionTable;
- redAct->actListId = curActionTable;
- redAct->key.setAsNew( length );
- char *ptr = $3->tag->content;
- int pos = 0;
- while ( *ptr != 0 ) {
- unsigned long actionId = strtoul( ptr, &ptr, 10 );
- redAct->key[pos].key = 0;
- redAct->key[pos].value = cgd->allActions+actionId;
- pos += 1;
- }
-
- /* Insert into the action table map. */
- cgd->redFsm->actionMap.insert( redAct );
- }
-
- curActionTable += 1;
- };
-
-#
-# Conditions.
-#
-
-tag_cond_space_list: tag_cond_space_list_head cond_space_list '/' TAG_cond_space_list;
-
-tag_cond_space_list_head: TAG_cond_space_list
- final {
- Attribute *lengthAttr = $1->tag->findAttr( "length" );
- if ( lengthAttr == 0 ) {
- error($1->loc) << "tag <cond_space_list> "
- "requires a length attribute" << endp;
- }
- else {
- ulong length = readLength( lengthAttr->value );
- cgd->initCondSpaceList( length );
- curCondSpace = 0;
- }
- };
-
-cond_space_list: cond_space_list tag_cond_space;
-cond_space_list: tag_cond_space;
-
-tag_cond_space: TAG_cond_space '/' TAG_cond_space
- final {
- Attribute *lengthAttr = $1->tag->findAttr( "length" );
- Attribute *idAttr = $1->tag->findAttr( "id" );
- if ( lengthAttr == 0 )
- error($1->loc) << "tag <cond_space> requires a length attribute" << endp;
- else {
- if ( lengthAttr == 0 )
- error($1->loc) << "tag <cond_space> requires an id attribute" << endp;
- else {
- unsigned long condSpaceId = strtoul( idAttr->value, 0, 10 );
- ulong length = readLength( lengthAttr->value );
-
- char *td = $3->tag->content;
- Key baseKey = readKey( td, &td );
-
- cgd->newCondSpace( curCondSpace, condSpaceId, baseKey );
- for ( ulong a = 0; a < length; a++ ) {
- long actionOffset = readOffsetPtr( td, &td );
- cgd->condSpaceItem( curCondSpace, actionOffset );
- }
- curCondSpace += 1;
- }
- }
- };
-
-}%%
-
-%%{
- write types;
- write data;
-}%%
-
-void XmlParser::init()
-{
- %% write init;
-}
-
-int XmlParser::parseLangEl( int type, const Token *token )
-{
- %% write exec;
- return errCount == 0 ? 0 : -1;
-}
-
-
-unsigned long readLength( char *td )
-{
- return strtoul( td, 0, 10 );
-}
-
-Key readKey( char *td, char **end )
-{
- if ( keyOps->isSigned )
- return Key( strtol( td, end, 10 ) );
- else
- return Key( strtoul( td, end, 10 ) );
-}
-
-long readOffsetPtr( char *td, char **end )
-{
- while ( *td == ' ' || *td == '\t' )
- td++;
-
- if ( *td == 'x' ) {
- if ( end != 0 )
- *end = td + 1;
- return -1;
- }
-
- return strtol( td, end, 10 );
-}
-
-ostream &XmlParser::warning( const InputLoc &loc )
-{
- cerr << fileName << ":" << loc.line << ":" << loc.col << ": warning: ";
- return cerr;
-}
-
-ostream &XmlParser::error( const InputLoc &loc )
-{
- gblErrorCount += 1;
- assert( fileName != 0 );
- cerr << fileName << ":" << loc.line << ":" << loc.col << ": ";
- return cerr;
-}
-
-
-ostream &XmlParser::parser_error( int tokId, Token &token )
-{
- gblErrorCount += 1;
- assert( fileName != 0 );
- cerr << fileName << ":" << token.loc.line << ":" << token.loc.col;
- if ( token.tag != 0 ) {
- if ( token.tag->tagId == 0 )
- cerr << ": at unknown tag";
- else
- cerr << ": at tag <" << token.tag->tagId->name << ">";
- }
- cerr << ": ";
-
- return cerr;
-}
-
-ostream &XmlParser::source_error( const InputLoc &loc )
-{
- gblErrorCount += 1;
- assert( sourceFileName != 0 );
- cerr << sourceFileName << ":" << loc.line << ":" << loc.col << ": ";
- return cerr;
-}
-
-
-int XmlParser::token( int tokenId, Token &tok )
-{
- int res = parseLangEl( tokenId, &tok );
- if ( res < 0 )
- parser_error( tokenId, tok ) << "parse error" << endp;
- return res;
-}
-
-int XmlParser::token( int tokenId, int col, int line )
-{
- Token tok;
- tok.loc.col = col;
- tok.loc.line = line;
- tok.tag = 0;
- return token( tokenId, tok );
-}
-
-int XmlParser::token( XMLTag *tag, int col, int line )
-{
- Token tok;
- tok.loc.col = col;
- tok.loc.line = line;
- tok.tag = tag;
-
- if ( tag->type == XMLTag::Close ) {
- int res = token( '/', tok );
- if ( res < 0 )
- return res;
- }
-
- tok.tag = tag;
- return token( tag->tagId != 0 ? tag->tagId->id : TAG_unknown, tok );
-}
diff --git a/ragel/xmlscan.rl b/ragel/xmlscan.rl
deleted file mode 100644
index e217183..0000000
--- a/ragel/xmlscan.rl
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * Copyright 2001-2007 Adrian Thurston <thurston@complang.org>
- */
-
-/* This file is part of Ragel.
- *
- * Ragel is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Ragel 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 Ragel; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-#include <iostream>
-#include <string.h>
-#include "vector.h"
-#include "xmlparse.h"
-
-using std::istream;
-using std::cout;
-using std::cerr;
-using std::endl;
-
-%%{
- machine XmlScanner;
- write data;
-}%%
-
-class Perfect_Hash
-{
-private:
- static inline unsigned int hash (const char *str, unsigned int len);
-
-public:
- static struct XMLTagHashPair *in_word_set (const char *str, unsigned int len);
-};
-
-XmlScanner::XmlScanner( const char *fileName, istream &input ) :
- fileName(fileName),
- input(input),
- curline(1),
- curcol(1),
- p(0), pe(0),
- done(false),
- data(0), data_len(0),
- value(0)
-{
- %%{
- machine XmlScanner;
- write init;
- }%%
-}
-
-#define TK_NO_TOKEN (-1)
-#define TK_ERR 1
-#define TK_SPACE 2
-#define TK_EOF 3
-#define TK_OpenTag 4
-#define TK_CloseTag 5
-
-#define ret_tok( _tok ) token = (_tok); data = ts
-
-void XmlScanner::adjustAttrPointers( int distance )
-{
- for ( AttrMkList::Iter attr = attrMkList; attr.lte(); attr++ ) {
- attr->id -= distance;
- attr->value -= distance;
- }
-}
-
-/* There is no claim that this is a proper XML parser, but it is good
- * enough for our purposes. */
-%%{
- machine XmlScanner;
-
- action colup { curcol++; }
- action start_tok { token_col = curcol; token_line = curline; }
- NL = '\n' @{ curcol = 0; curline++; };
-
- WS = [\r\t ] | NL;
- id = [_a-zA-Z][_a-zA-Z0-9]*;
- literal = '"' ( [^"] | NL )* '"';
-
- # Attribute identifiers.
- action start_attr_id { attr_id_start = p; }
- action leave_attr_id { attr_id_len = p - attr_id_start; }
-
- attr_id = id >start_attr_id %leave_attr_id;
-
- # Attribute values
- action start_attr_value { attr_value_start = p; }
- action leave_attr_value
- {
- attr_value_len = p - attr_value_start;
-
- AttrMarker newAttr;
- newAttr.id = attr_id_start;
- newAttr.idLen = attr_id_len;
- newAttr.value = attr_value_start;
- newAttr.valueLen = attr_value_len;
- attrMkList.append( newAttr );
- }
-
- attr_value = literal >start_attr_value %leave_attr_value;
-
- # Attribute list.
- attribute = attr_id WS* '=' WS* attr_value WS*;
-
- # Tag identifiers.
- action tag_id_start { tag_id_start = p; }
- action leave_tag_id { tag_id_len = p - tag_id_start; }
-
- tag_id = id >tag_id_start %leave_tag_id;
-
- main := |*
- # Tags
- ( '<' WS* tag_id ( WS+ attribute* )? '>' ) >start_tok $colup
- => { ret_tok( TK_OpenTag ); fbreak; };
-
- ( '<' WS* '/' WS* tag_id WS* '>' ) >start_tok $colup
- => { ret_tok( TK_CloseTag ); fbreak; };
-
- # Data in between tags.
- ( [^<&\0] | NL ) $colup
- => { buffer.append( *p ); };
-
- # Specials.
- "&amp;" $colup
- => { buffer.append( '&' ); };
- "&lt;" $colup
- => { buffer.append( '<' ); };
- "&gt;" $colup
- => { buffer.append( '>' ); };
-
- # EOF
- 0 >start_tok => { ret_tok( TK_EOF ); fbreak; };
-
- *|;
-}%%
-
-int XmlScanner::scan( )
-{
- int token = TK_NO_TOKEN;
- int space = 0, readlen = 0;
- char *attr_id_start = 0;
- char *attr_value_start = 0;
- int attr_id_len = 0;
- int attr_value_len = 0;
-
- attrMkList.empty();
- buffer.clear();
-
- while ( 1 ) {
- if ( p == pe ) {
- //printf("scanner: need more data\n");
-
- if ( ts == 0 )
- have = 0;
- else {
- /* There is data that needs to be shifted over. */
- //printf("scanner: buffer broken mid token\n");
- have = pe - ts;
- memmove( buf, ts, have );
-
- int distance = ts - buf;
- te -= distance;
- tag_id_start -= distance;
- attr_id_start -= distance;
- attr_value_start -= distance;
- adjustAttrPointers( distance );
- ts = buf;
- }
-
- p = buf + have;
- space = XML_BUFSIZE - have;
-
- if ( space == 0 ) {
- /* We filled up the buffer trying to scan a token. */
- return TK_SPACE;
- }
-
- if ( done ) {
- //printf("scanner: end of file\n");
- p[0] = 0;
- readlen = 1;
- }
- else {
- input.read( p, space );
- readlen = input.gcount();
- if ( input.eof() ) {
- //printf("scanner: setting done flag\n");
- done = 1;
- }
- }
-
- pe = p + readlen;
- }
-
- %% write exec;
-
- if ( cs == XmlScanner_error )
- return TK_ERR;
-
- if ( token != TK_NO_TOKEN ) {
- data_len = p - data;
- return token;
- }
- }
-}
-
-int xml_parse( std::istream &input, const char *fileName,
- bool outputActive, bool wantComplete,
- XmlScanner &scanner, XmlParser &parser )
-{
- while ( 1 ) {
- int token = scanner.scan();
- if ( token == TK_NO_TOKEN ) {
- cerr << "xmlscan: interal error: scanner returned NO_TOKEN" << endl;
- exit(1);
- }
- else if ( token == TK_EOF ) {
- parser.token( XmlParser_tk_eof, scanner.token_col, scanner.token_line );
- break;
- }
- else if ( token == TK_ERR ) {
- scanner.error() << "scanner error" << endl;
- break;
- }
- else if ( token == TK_SPACE ) {
- scanner.error() << "scanner is out of buffer space" << endl;
- break;
- }
- else {
- /* All other tokens are either open or close tags. */
- XMLTagHashPair *tagId = Perfect_Hash::in_word_set(
- scanner.tag_id_start, scanner.tag_id_len );
-
- XMLTag *tag = new XMLTag( tagId, token == TK_OpenTag ?
- XMLTag::Open : XMLTag::Close );
-
- if ( tagId != 0 ) {
- /* Get attributes for open tags. */
- if ( token == TK_OpenTag && scanner.attrMkList.length() > 0 ) {
- tag->attrList = new AttrList;
- for ( AttrMkList::Iter attr = scanner.attrMkList;
- attr.lte(); attr++ )
- {
- Attribute newAttr;
- newAttr.id = new char[attr->idLen+1];
- memcpy( newAttr.id, attr->id, attr->idLen );
- newAttr.id[attr->idLen] = 0;
-
- /* Exclude the surrounding quotes. */
- newAttr.value = new char[attr->valueLen-1];
- memcpy( newAttr.value, attr->value+1, attr->valueLen-2 );
- newAttr.value[attr->valueLen-2] = 0;
-
- tag->attrList->append( newAttr );
- }
- }
-
- /* Get content for closing tags. */
- if ( token == TK_CloseTag ) {
- switch ( tagId->id ) {
- case TAG_host: case TAG_arg:
- case TAG_t: case TAG_alphtype:
- case TAG_text: case TAG_goto:
- case TAG_call: case TAG_next:
- case TAG_entry: case TAG_set_tokend:
- case TAG_set_act: case TAG_start_state:
- case TAG_error_state: case TAG_state_actions:
- case TAG_action_table: case TAG_cond_space:
- case TAG_c: case TAG_ex: case TAG_eof_t:
- tag->content = new char[scanner.buffer.length+1];
- memcpy( tag->content, scanner.buffer.data,
- scanner.buffer.length );
- tag->content[scanner.buffer.length] = 0;
- break;
- }
- }
- }
-
- #if 0
- cerr << "parser_driver: " << (tag->type == XMLTag::Open ? "open" : "close") <<
- ": " << (tag->tagId != 0 ? tag->tagId->name : "<unknown>") << endl;
- if ( tag->attrList != 0 ) {
- for ( AttrList::Iter attr = *tag->attrList; attr.lte(); attr++ )
- cerr << " " << attr->id << ": " << attr->value << endl;
- }
- if ( tag->content != 0 )
- cerr << " content: " << tag->content << endl;
- #endif
-
- parser.token( tag, scanner.token_col, scanner.token_line );
- }
- }
-
- return 0;
-}
-
-std::ostream &XmlScanner::error()
-{
- gblErrorCount += 1;
- cerr << fileName << ":" << curline << ":" << curcol << ": ";
- return cerr;
-}
diff --git a/ragel/xmltags.gperf b/ragel/xmltags.gperf
deleted file mode 100644
index 48ae352..0000000
--- a/ragel/xmltags.gperf
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2005 Adrian Thurston <thurston@complang.org>
- */
-
-/* This file is part of Ragel.
- *
- * Ragel is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Ragel 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 Ragel; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-%{
-#include <string.h>
-#include "xmlparse.h"
-%}
-%compare-strncmp
-struct XMLTagHashPair;
-%%
-ragel, TAG_ragel
-ragel_def, TAG_ragel_def
-host, TAG_host
-state_list, TAG_state_list
-state, TAG_state
-trans_list, TAG_trans_list
-t, TAG_t
-machine, TAG_machine
-start_state, TAG_start_state
-error_state, TAG_error_state
-action_list, TAG_action_list
-action, TAG_action
-action_table_list, TAG_action_table_list
-action_table, TAG_action_table
-alphtype, TAG_alphtype
-getkey, TAG_getkey
-state_actions, TAG_state_actions
-entry_points, TAG_entry_points
-text, TAG_text
-goto, TAG_goto
-call, TAG_call
-next, TAG_next
-goto_expr, TAG_goto_expr
-call_expr, TAG_call_expr
-next_expr, TAG_next_expr
-ret, TAG_ret
-pchar, TAG_pchar
-char, TAG_char
-hold, TAG_hold
-exec, TAG_exec
-curs, TAG_curs
-targs, TAG_targs
-entry, TAG_entry
-data, TAG_data
-lm_switch, TAG_lm_switch
-sub_action, TAG_sub_action
-init_act, TAG_init_act
-set_act, TAG_set_act
-get_tokend, TAG_get_tokend
-set_tokend, TAG_set_tokend
-init_tokstart, TAG_init_tokstart
-set_tokstart, TAG_set_tokstart
-write, TAG_write
-access, TAG_access
-break, TAG_break
-arg, TAG_arg
-cond_space_list, TAG_cond_space_list
-cond_space, TAG_cond_space
-cond_list, TAG_cond_list
-c, TAG_c
-exports, TAG_exports
-ex, TAG_ex
-p_expr, TAG_p_expr
-pe_expr, TAG_pe_expr
-eof_expr, TAG_eof_expr
-cs_expr, TAG_cs_expr
-top_expr, TAG_top_expr
-stack_expr, TAG_stack_expr
-act_expr, TAG_act_expr
-tokstart_expr, TAG_tokstart_expr
-tokend_expr, TAG_tokend_expr
-data_expr, TAG_data_expr
-prepush, TAG_prepush
-postpop, TAG_postpop
-eof_t, TAG_eof_t
diff --git a/run_test.sh b/run_test.sh
new file mode 100755
index 0000000..4257d1e
--- /dev/null
+++ b/run_test.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+
+PACKAGE_NAME=$1
+PACKAGE_VERSION=$2
+
+TEST_LOG="/tmp/${PACKAGE_NAME}_test"
+export TEST_LOG
+
+# Color
+Color_Off='\e[0m' # Text Reset
+
+# Regular Colors
+Red='\e[0;31m' # Red
+Green='\e[0;32m' # Green
+Cyan='\e[0;36m' # Cyank
+
+# Bold
+BWhite='\e[1;37m' # White
+
+result_check() {
+ test_case=$1
+ if [ $? -eq 0 ]
+ then
+ echo -e "${Green}PASS${Color_Off}: $test_case"
+ echo "TEST: PASS: $test_case" >> ${TEST_LOG}
+ else
+ echo -e "${Red}FAIL${Color_Off}: $test_case"
+ echo -e "TEST: FAIL: $test_case" >> ${TEST_LOG}
+ fi
+}
+
+skip_test() {
+ test_case=$1
+ echo -e "${Cyan}SKIP${Color_Off}: $test_case"
+ echo "TEST: SKIP: $test_case" >> ${TEST_LOG}
+}
+
+TOTAL_CNT=`grep "TEST:" ${TEST_LOG} | wc -l`
+PASS_CNT=`grep "PASS:" ${TEST_LOG} | wc -l`
+FAIL_CNT=`grep "FAIL:" ${TEST_LOG} | wc -l`
+SKIP_CNT=`grep "SKIP:" ${TEST_LOG} | wc -l`
+
+
+br='==================='; br=$br$br$br$br;
+
+echo -e "${Green}$br ${Color_Off}"
+echo -e "${Green}Testsuite summary for ${PACKAGE_NAME} ${PACKAGE_VERSION}${Color_Off}"
+echo -e "${Green}$br ${Color_Off}"
+echo -e "#${BWhite} TOTAL: $TOTAL_CNT ${Color_Off}"
+echo -e "#${Green} PASS${Color_Off} : $PASS_CNT"
+echo -e "#${Red} FAIL${Color_Off} : $FAIL_CNT"
+echo -e "#${Cyan} SKIP${Color_Off} : $SKIP_CNT"
+echo -e "${Green}$br ${Color_Off}"
+
+rm -f ${TEST_LOG}
+exit 0
+
diff --git a/test/Makefile.am b/test/Makefile.am
index f49c9c1..e27bd5b 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -42,4 +42,5 @@ EXTRA_DIST = \
CLEANFILES = \
*.c *.cpp *.m *.d *.java *.bin *.class *.exp \
- *.out *_c.rl *_d.rl *_java.rl *_ruby.rl *_csharp.rl *.cs *.exe
+ *.out *_c.rl *_d.rl *_java.rl *_ruby.rl *_csharp.rl *.cs \
+ *_go.rl *.go *.exe
diff --git a/test/Makefile.in b/test/Makefile.in
new file mode 100644
index 0000000..a9b2e93
--- /dev/null
+++ b/test/Makefile.in
@@ -0,0 +1,479 @@
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# Copyright 2002-2009 Adrian Thurston <thurston@complang.org>
+#
+
+# This file is part of Ragel.
+#
+# Ragel is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# Ragel 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 Ragel; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = test
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/runtests.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/ragel/config.h
+CONFIG_CLEAN_FILES = runtests
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__tty_colors = \
+red=; grn=; lgn=; blu=; std=
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+FIG2DEV = @FIG2DEV@
+GDC = @GDC@
+GMCS = @GMCS@
+GOBIN = @GOBIN@
+GOBJC = @GOBJC@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAVAC = @JAVAC@
+KELBT = @KELBT@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PDFLATEX = @PDFLATEX@
+PUBDATE = @PUBDATE@
+RAGEL = @RAGEL@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TXL = @TXL@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+TESTS = runtests
+EXTRA_DIST = \
+ atoi1.rl clang2.rl cond7.rl element3.rl erract8.rl forder3.rl java1.rl \
+ range.rl scan3.rl xml.rl atoi2.rl clang3.rl cppscan1.rl eofact.rl \
+ erract9.rl gotocallret1.rl java2.rl recdescent1.rl scan4.rl atoi3.rl \
+ clang4.rl cppscan2.rl erract1.rl export1.rl gotocallret2.rl keller1.rl \
+ recdescent2.rl stateact1.rl awkemu.rl cond1.rl cppscan3.rl erract2.rl \
+ export2.rl high1.rl lmgoto.rl recdescent3.rl statechart1.rl builtin.rl \
+ cond2.rl cppscan4.rl erract3.rl export3.rl high2.rl mailbox1.rl \
+ repetition.rl strings1.rl call1.rl cond3.rl cppscan5.rl erract4.rl \
+ export4.rl high3.rl mailbox2.rl rlscan.rl strings2.rl call2.rl cond4.rl \
+ cppscan6.rl erract5.rl fnext1.rl import1.rl mailbox3.rl ruby1.rl \
+ tokstart1.rl call3.rl cond5.rl element1.rl erract6.rl forder1.rl \
+ include1.rl minimize1.rl scan1.rl union.rl clang1.rl cond6.rl \
+ element2.rl erract7.rl forder2.rl include2.rl patact.rl scan2.rl \
+ xmlcommon.rl langtrans_c.sh langtrans_csharp.sh langtrans_d.sh \
+ langtrans_java.sh langtrans_ruby.sh checkeofact.txl \
+ langtrans_csharp.txl langtrans_c.txl langtrans_d.txl langtrans_java.txl \
+ langtrans_ruby.txl testcase.txl cppscan1.h eofact.h mailbox1.h strings2.h
+
+CLEANFILES = \
+ *.c *.cpp *.m *.d *.java *.bin *.class *.exp \
+ *.out *_c.rl *_d.rl *_java.rl *_ruby.rl *_csharp.rl *.cs \
+ *_go.rl *.go *.exe
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign test/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+runtests: $(top_builddir)/config.status $(srcdir)/runtests.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ fi; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am check check-TESTS check-am clean clean-generic \
+ distclean distclean-generic distdir dvi dvi-am html html-am \
+ info info-am install install-am install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
+ uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/atoi1.rl b/test/atoi1.rl
index ea706c8..013348e 100644
--- a/test/atoi1.rl
+++ b/test/atoi1.rl
@@ -19,7 +19,7 @@ neg = false;
}
action add_digit {
- val = val * 10 + (fc - 48);
+ val = val * 10 + <int>(fc - 48);
}
action finish {
diff --git a/test/atoi2.rl b/test/atoi2.rl
index 923e88f..9f17c69 100644
--- a/test/atoi2.rl
+++ b/test/atoi2.rl
@@ -20,7 +20,7 @@ neg = false;
}
action add_digit {
- val = val * 10 + (fc - 48);
+ val = val * 10 + <int>(fc - 48);
}
action finish {
diff --git a/test/cond7.rl b/test/cond7.rl
index 3951af0..a88e67c 100644
--- a/test/cond7.rl
+++ b/test/cond7.rl
@@ -11,14 +11,14 @@ int c;
action testi {i > 0}
action inc {
i = i - 1;
- c = fc;
+ c = <int>(fc);
prints "item: ";
printi c;
prints "\n";
}
count = [0-9] @{
- i = fc - '0';
+ i = <int>(fc - '0');
prints "count: ";
printi i;
prints "\n";
diff --git a/test/cppscan6.rl b/test/cppscan6.rl
index ed82fe6..ad2d266 100644
--- a/test/cppscan6.rl
+++ b/test/cppscan6.rl
@@ -266,7 +266,7 @@ int token;
# Single char symbols.
( punct - [_"'] ) => {
- token = first_token_char;
+ token = <int>(first_token_char);
prints "<";
printi token;
prints "> ";
diff --git a/test/langtrans_c.txl b/test/langtrans_c.txl
index e80e508..5a4971f 100644
--- a/test/langtrans_c.txl
+++ b/test/langtrans_c.txl
@@ -122,11 +122,27 @@ function alStmtToC1 AlStmt [action_lang_stmt]
Result
end function
-function alTermToC
+rule alTermToC1
replace [al_term]
'first_token_char
by
'ts '[0]
+end rule
+
+rule alTermToC2
+ replace [al_term]
+ '< _ [al_type_decl] '> '( AlExpr [al_expr] ')
+ by
+ '( AlExpr ')
+end rule
+
+function alTermToC
+ replace [al_term]
+ AlTerm [al_term]
+ by
+ AlTerm
+ [alTermToC1]
+ [alTermToC2]
end function
function alExprExtendToC AlExprExtend [repeat al_expr_extend]
diff --git a/test/langtrans_csharp.txl b/test/langtrans_csharp.txl
index cf4a2c1..a8c6003 100644
--- a/test/langtrans_csharp.txl
+++ b/test/langtrans_csharp.txl
@@ -125,11 +125,27 @@ function alStmtToCSharp1 AlStmt [action_lang_stmt]
Result
end function
-function alTermToCSharp
+rule alTermToCSharp1
replace [al_term]
'first_token_char
by
'data '[ts]
+end rule
+
+rule alTermToCSharp2
+ replace [al_term]
+ '< _ [al_type_decl] '> '( AlExpr [al_expr] ')
+ by
+ '( AlExpr ')
+end rule
+
+function alTermToCSharp
+ replace [al_term]
+ AlTerm [al_term]
+ by
+ AlTerm
+ [alTermToCSharp1]
+ [alTermToCSharp2]
end function
function alExprExtendToCSharp AlExprExtend [repeat al_expr_extend]
diff --git a/test/langtrans_d.txl b/test/langtrans_d.txl
index 3d8b8a7..845a003 100644
--- a/test/langtrans_d.txl
+++ b/test/langtrans_d.txl
@@ -95,11 +95,27 @@ function alStmtToD1 AlStmt [action_lang_stmt]
Result
end function
-function alTermToD
+rule alTermToD1
replace [al_term]
'first_token_char
by
'ts '[0]
+end rule
+
+rule alTermToD2
+ replace [al_term]
+ '< _ [al_type_decl] '> '( AlExpr [al_expr] ')
+ by
+ '( AlExpr ')
+end rule
+
+function alTermToD
+ replace [al_term]
+ AlTerm [al_term]
+ by
+ AlTerm
+ [alTermToD1]
+ [alTermToD2]
end function
function alExprExtendToD AlExprExtend [repeat al_expr_extend]
diff --git a/test/langtrans_java.txl b/test/langtrans_java.txl
index 8016ab2..c5cde5d 100644
--- a/test/langtrans_java.txl
+++ b/test/langtrans_java.txl
@@ -132,11 +132,27 @@ function alStmtToJava1 AlStmt [action_lang_stmt]
Result
end function
-function alTermToJava
+rule alTermToJava1
replace [al_term]
'first_token_char
by
'data '[ts]
+end rule
+
+rule alTermToJava2
+ replace [al_term]
+ '< _ [al_type_decl] '> '( AlExpr [al_expr] ')
+ by
+ '( AlExpr ')
+end rule
+
+function alTermToJava
+ replace [al_term]
+ AlTerm [al_term]
+ by
+ AlTerm
+ [alTermToJava1]
+ [alTermToJava2]
end function
function alExprExtendToJava AlExprExtend [repeat al_expr_extend]
diff --git a/test/langtrans_ruby.txl b/test/langtrans_ruby.txl
index 265426f..42f203d 100644
--- a/test/langtrans_ruby.txl
+++ b/test/langtrans_ruby.txl
@@ -140,11 +140,27 @@ function alStmtToRuby1 AlStmt [action_lang_stmt]
[initDecl5 VarDecl]
end function
-function alTermToRuby
+rule alTermToRuby1
replace [al_term]
'first_token_char
by
'data '[ts]
+end rule
+
+rule alTermToRuby2
+ replace [al_term]
+ '< _ [al_type_decl] '> '( AlExpr [al_expr] ')
+ by
+ '( AlExpr ')
+end rule
+
+function alTermToRuby
+ replace [al_term]
+ AlTerm [al_term]
+ by
+ AlTerm
+ [alTermToRuby1]
+ [alTermToRuby2]
end function
function alExprExtendToRuby AlExprExtend [repeat al_expr_extend]
diff --git a/test/runtests.in b/test/runtests.in
index d331f77..8eb91ed 100755
--- a/test/runtests.in
+++ b/test/runtests.in
@@ -18,9 +18,10 @@
#
# You should have received a copy of the GNU General Public License
# along with Ragel; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+TEST_LOG="/tmp/ragel_test"
-while getopts "gcnmleT:F:G:P:CDJRA" opt; do
+while getopts "gcnmleT:F:G:P:CDJRAZ" opt; do
case $opt in
T|F|G|P)
genflags="$genflags -$opt$OPTARG"
@@ -37,7 +38,7 @@ while getopts "gcnmleT:F:G:P:CDJRA" opt; do
g)
allow_generated="true"
;;
- C|D|J|R|A)
+ C|D|J|R|A|Z)
langflags="$langflags -$opt"
;;
esac
@@ -45,13 +46,13 @@ done
[ -z "$minflags" ] && minflags="-n -m -l -e"
[ -z "$genflags" ] && genflags="-T0 -T1 -F0 -F1 -G0 -G1 -G2"
-[ -z "$langflags" ] && langflags="-C -D -J -R -A"
+[ -z "$langflags" ] && langflags="-C -D -J -R -A -Z"
shift $((OPTIND - 1));
[ -z "$*" ] && set -- *.rl
-config=../ragel/config.h
+config=../src/config.h
ragel=../ragel/ragel
cxx_compiler="@CXX@"
@@ -62,6 +63,7 @@ java_compiler="@JAVAC@"
txl_engine="@TXL@"
ruby_engine="@RUBY@"
csharp_compiler="@GMCS@"
+go_compiler="@GOBIN@"
function test_error
{
@@ -124,9 +126,10 @@ function run_test()
$exec_cmd 2>&1 > $output;
if diff --strip-trailing-cr $expected_out $output > /dev/null; then
echo "passed";
+ echo "TEST: PASS: $root" >> $TEST_LOG;
else
- echo "FAILED";
- test_error;
+ echo "FAILED";
+ echo "TEST: FAIL: $root" >> $TEST_LOG;
fi;
fi
}
@@ -203,18 +206,25 @@ for test_case; do
compiler=$csharp_compiler
cflags=""
;;
+ go)
+ lang_opt="-Z"
+ code_suffix=go
+ compiler=$go_compiler
+ cflags=""
+ ;;
indep)
lang_opt="";
# If we have no txl engine then skip this test.
[ -z "$txl_engine" ] && continue
- for lang in c d java ruby csharp; do
+ for lang in c d java ruby csharp go; do
case $lang in
c) lf="-C";;
d) lf="-D";;
java) lf="-J";;
ruby) lf="-R";;
csharp) lf="-A";;
+ go) lf="-Z";;
esac
echo "$langflags" | grep -e $lf >/dev/null || continue
@@ -308,6 +318,20 @@ for test_case; do
done
done
;;
- esac
+ go)
+ # Using genflags, get the allowed gen flags from the test case. If the
+ # test case doesn't specify assume that all gen flags are allowed.
+ allow_genflags=`sed '/@ALLOW_GENFLAGS:/s/^.*: *//p;d' $test_case`
+ [ -z "$allow_genflags" ] && allow_genflags="-T0 -T1 -F0 -F1 -G0 -G1 -G2"
+
+ for min_opt in $minflags; do
+ echo "$allow_minflags" | grep -e $min_opt >/dev/null || continue
+ for gen_opt in $genflags; do
+ echo "$allow_genflags" | grep -e $gen_opt >/dev/null || continue
+ run_test
+ done
+ done
+ ;;
+ esac
done
diff --git a/test/testcase.txl b/test/testcase.txl
index 3369c15..65d7912 100644
--- a/test/testcase.txl
+++ b/test/testcase.txl
@@ -127,6 +127,7 @@ define al_term_base
| 'true
| 'false
| '( [al_expr] ')
+ | '< [SPOFF] [al_type_decl] '> '( [SPON] [al_expr] ')
| 'first_token_char
end define