OSDN Git Service

CommentLexerの内部を実装した。<lexeme>内の終端記号以外の実装を完了した。
authorderui <derutakayu@user.sourceforge.jp>
Wed, 20 Jan 2010 14:39:30 +0000 (23:39 +0900)
committerderui <derutakayu@user.sourceforge.jp>
Wed, 20 Jan 2010 14:39:30 +0000 (23:39 +0900)
16 files changed:
Makefile
Rakefile
config.log
config.status
src/lexeme.h
src/lexer/boolean_lexer.cpp
src/lexer/comment_lexer.cpp
src/lexer/comment_lexer.h
src/lexer/identifier_lexer.cpp
src/lexer/number_lexer.cpp
src/lexer/number_lexer_detail_templates.h
src/lexer/string_lexer.cpp
src/lexer/term_checker.cpp
src/lexer/term_checker.h
src/lexer/term_lexer.h
test/comment_lexer_test.cpp

index e52a6a9..b102303 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -69,11 +69,11 @@ DIST_ARCHIVES = $(distdir).tar.gz
 GZIP_ENV = --best
 distuninstallcheck_listfiles = find . -type f -print
 distcleancheck_listfiles = find . -type f -print
-ACLOCAL = ${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run aclocal-1.10
-AMTAR = ${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run tar
-AUTOCONF = ${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run autoconf
-AUTOHEADER = ${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run autoheader
-AUTOMAKE = ${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run automake-1.10
+ACLOCAL = ${SHELL} /home/derui/develop/utakata/missing --run aclocal-1.10
+AMTAR = ${SHELL} /home/derui/develop/utakata/missing --run tar
+AUTOCONF = ${SHELL} /home/derui/develop/utakata/missing --run autoconf
+AUTOHEADER = ${SHELL} /home/derui/develop/utakata/missing --run autoheader
+AUTOMAKE = ${SHELL} /home/derui/develop/utakata/missing --run automake-1.10
 AWK = gawk
 CC = gcc
 CCDEPMODE = depmode=gcc3
@@ -83,16 +83,16 @@ CPPFLAGS =
 CXX = g++
 CXXDEPMODE = depmode=gcc3
 CXXFLAGS = -g -O2
-CYGPATH_W = cygpath -w
+CYGPATH_W = echo
 DEFS = -DHAVE_CONFIG_H
 DEPDIR = .deps
 ECHO_C = 
 ECHO_N = -n
 ECHO_T = 
 EGREP = /bin/grep -E
-EXEEXT = .exe
+EXEEXT = 
 GREP = /bin/grep
-INSTALL = /bin/install -c
+INSTALL = /usr/bin/install -c
 INSTALL_DATA = ${INSTALL} -m 644
 INSTALL_PROGRAM = ${INSTALL}
 INSTALL_SCRIPT = ${INSTALL}
@@ -101,7 +101,7 @@ LDFLAGS =
 LIBOBJS = 
 LIBS = 
 LTLIBOBJS = 
-MAKEINFO = ${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run makeinfo
+MAKEINFO = ${SHELL} /home/derui/develop/utakata/missing --run makeinfo
 MKDIR_P = /bin/mkdir -p
 OBJEXT = o
 PACKAGE = utakata
@@ -115,10 +115,10 @@ SET_MAKE =
 SHELL = /bin/sh
 STRIP = 
 VERSION = 0.0.1
-abs_builddir = /cygdrive/c/meadow/develop/utakata
-abs_srcdir = /cygdrive/c/meadow/develop/utakata
-abs_top_builddir = /cygdrive/c/meadow/develop/utakata
-abs_top_srcdir = /cygdrive/c/meadow/develop/utakata
+abs_builddir = /home/derui/develop/utakata
+abs_srcdir = /home/derui/develop/utakata
+abs_top_builddir = /home/derui/develop/utakata
+abs_top_srcdir = /home/derui/develop/utakata
 ac_ct_CC = gcc
 ac_ct_CXX = g++
 am__include = include
@@ -138,7 +138,7 @@ host_alias =
 htmldir = ${docdir}
 includedir = ${prefix}/include
 infodir = ${datarootdir}/info
-install_sh = $(SHELL) /cygdrive/c/meadow/develop/utakata/install-sh
+install_sh = $(SHELL) /home/derui/develop/utakata/install-sh
 libdir = ${exec_prefix}/lib
 libexecdir = ${exec_prefix}/libexec
 localedir = ${datarootdir}/locale
index 26f8e3f..c592350 100644 (file)
--- a/Rakefile
+++ b/Rakefile
@@ -22,9 +22,9 @@ TEST_SRCS = FileList["./test/*.cpp"]
 TEST_OBJECTS = TEST_SRCS.ext("o")
 TEST_OBJECTS.include(OBJS)
 TEST_DEPS = TEST_SRCS.ext("mf")
-TEST_PROGRAMS = TEST_SRCS.ext(".exe")
+TEST_PROGRAMS = TEST_SRCS.ext("")
 
-EXEEXT = ".exe"
+EXEEXT = ""
 
 # lists of clean objects
 CLEAN.include(OBJS, TEST_OBJECTS)
index e885965..34ea0ab 100644 (file)
@@ -10,16 +10,16 @@ generated by GNU Autoconf 2.63.  Invocation command line was
 ## Platform. ##
 ## --------- ##
 
-hostname = c2007
+hostname = vaio_z
 uname -m = i686
-uname -r = 1.7.1(0.218/5/3)
-uname -s = CYGWIN_NT-5.0
-uname -v = 2009-12-07 11:48
+uname -r = 2.6.32-gentoo-r1
+uname -s = Linux
+uname -v = #2 SMP Wed Jan 13 20:45:37 JST 2010
 
-/usr/bin/uname -p = unknown
+/usr/bin/uname -p = Intel(R) Core(TM)2 Duo CPU P8800 @ 2.66GHz
 /bin/uname -X     = unknown
 
-/bin/arch              = i686
+/bin/arch              = unknown
 /usr/bin/arch -k       = unknown
 /usr/convex/getsysinfo = unknown
 /usr/bin/hostinfo      = unknown
@@ -27,9 +27,7 @@ uname -v = 2009-12-07 11:48
 /usr/bin/oslevel       = unknown
 /bin/universe          = unknown
 
-PATH: /cygdrive/d/Program Files/OMake/bin
 PATH: /home/derui/bin
-PATH: /usr/local/stow/bin
 PATH: /usr/local/bin
 PATH: /usr/local/sbin
 PATH: /usr/sbin
@@ -46,7 +44,7 @@ PATH: /usr/X11R6/bin
 ## ----------- ##
 
 configure:1883: checking for a BSD-compatible install
-configure:1951: result: /bin/install -c
+configure:1951: result: /usr/bin/install -c
 configure:1962: checking whether build environment is sane
 configure:2005: result: yes
 configure:2030: checking for a thread-safe mkdir -p
@@ -57,11 +55,11 @@ configure:2109: result: gawk
 configure:2120: checking whether make sets $(MAKE)
 configure:2142: result: yes
 configure:2386: checking for g++
-configure:2402: found /bin/g++
+configure:2402: found /usr/bin/g++
 configure:2413: result: g++
 configure:2440: checking for C++ compiler version
 configure:2448: g++ --version >&5
-g++ (GCC) 4.3.4 20090804 (release) 1
+g++ (Gentoo 4.3.4 p1.0, pie-10.1.5) 4.3.4
 Copyright (C) 2008 Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@@ -69,10 +67,10 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 configure:2452: $? = 0
 configure:2459: g++ -v >&5
 Using built-in specs.
-Target: i686-pc-cygwin
-Configured with: /gnu/gcc/releases/packaging/4.3.4-3/gcc4-4.3.4-3/src/gcc-4.3.4/configure --srcdir=/gnu/gcc/releases/packaging/4.3.4-3/gcc4-4.3.4-3/src/gcc-4.3.4 --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc --infodir=/usr/share/info --mandir=/usr/share/man --datadir=/usr/share --infodir=/usr/share/info --mandir=/usr/share/man -v --with-gmp=/usr --with-mpfr=/usr --enable-bootstrap --enable-version-specific-runtime-libs --with-slibdir=/usr/bin --libexecdir=/usr/lib --enable-static --enable-shared --enable-shared-libgcc --disable-__cxa_atexit --with-gnu-ld --with-gnu-as --with-dwarf2 --disable-sjlj-exceptions --enable-languages=ada,c,c++,fortran,java,objc,obj-c++ --disable-symvers --enable-libjava --program-suffix=-4 --enable-libgomp --enable-libssp --enable-libada --enable-threads=posix --with-arch=i686 --with-tune=generic --enable-libgcj-sublibs CC=gcc-4 CXX=g++-4 CC_FOR_TARGET=gcc-4 CXX_FOR_TARGET=g++-4 GNATMAKE_FOR_TARGET=gnatmake GNATBIND_FOR_TARGET=gnatbind AS=/opt/gcc-tools/bin/as.exe AS_FOR_TARGET=/opt/gcc-tools/bin/as.exe LD=/opt/gcc-tools/bin/ld.exe LD_FOR_TARGET=/opt/gcc-tools/bin/ld.exe --with-ecj-jar=/usr/share/java/ecj.jar
+Target: i686-pc-linux-gnu
+Configured with: /var/tmp/portage/sys-devel/gcc-4.3.4/work/gcc-4.3.4/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.3.4 --includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.4 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.4/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.4/info --with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --disable-fixed-point --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-multilib --enable-libmudflap --disable-libssp --enable-libgomp --disable-libgcj --with-arch=i686 --enable-languages=c,c++,treelang,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --with-bugurl=http://bugs.gentoo.org/ --with-pkgversion='Gentoo 4.3.4 p1.0, pie-10.1.5'
 Thread model: posix
-gcc version 4.3.4 20090804 (release) 1 (GCC
+gcc version 4.3.4 (Gentoo 4.3.4 p1.0, pie-10.1.5
 configure:2463: $? = 0
 configure:2470: g++ -V >&5
 g++: '-V' option must have argument
@@ -80,17 +78,17 @@ configure:2474: $? = 1
 configure:2497: checking for C++ compiler default output file name
 configure:2519: g++    conftest.cpp  >&5
 configure:2523: $? = 0
-configure:2561: result: a.exe
+configure:2561: result: a.out
 configure:2580: checking whether the C++ compiler works
-configure:2590: ./a.exe
+configure:2590: ./a.out
 configure:2594: $? = 0
 configure:2613: result: yes
 configure:2620: checking whether we are cross compiling
 configure:2622: result: no
 configure:2625: checking for suffix of executables
-configure:2632: g++ -o conftest.exe    conftest.cpp  >&5
+configure:2632: g++ -o conftest    conftest.cpp  >&5
 configure:2636: $? = 0
-configure:2662: result: .exe
+configure:2662: result: 
 configure:2668: checking for suffix of object files
 configure:2694: g++ -c   conftest.cpp >&5
 configure:2698: $? = 0
@@ -108,11 +106,11 @@ configure:2989: result: GNU
 configure:3014: checking dependency style of g++
 configure:3105: result: gcc3
 configure:3168: checking for gcc
-configure:3184: found /bin/gcc
+configure:3184: found /usr/bin/gcc
 configure:3195: result: gcc
 configure:3427: checking for C compiler version
 configure:3435: gcc --version >&5
-gcc (GCC) 4.3.4 20090804 (release) 1
+gcc (Gentoo 4.3.4 p1.0, pie-10.1.5) 4.3.4
 Copyright (C) 2008 Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@@ -120,10 +118,10 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 configure:3439: $? = 0
 configure:3446: gcc -v >&5
 Using built-in specs.
-Target: i686-pc-cygwin
-Configured with: /gnu/gcc/releases/packaging/4.3.4-3/gcc4-4.3.4-3/src/gcc-4.3.4/configure --srcdir=/gnu/gcc/releases/packaging/4.3.4-3/gcc4-4.3.4-3/src/gcc-4.3.4 --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc --infodir=/usr/share/info --mandir=/usr/share/man --datadir=/usr/share --infodir=/usr/share/info --mandir=/usr/share/man -v --with-gmp=/usr --with-mpfr=/usr --enable-bootstrap --enable-version-specific-runtime-libs --with-slibdir=/usr/bin --libexecdir=/usr/lib --enable-static --enable-shared --enable-shared-libgcc --disable-__cxa_atexit --with-gnu-ld --with-gnu-as --with-dwarf2 --disable-sjlj-exceptions --enable-languages=ada,c,c++,fortran,java,objc,obj-c++ --disable-symvers --enable-libjava --program-suffix=-4 --enable-libgomp --enable-libssp --enable-libada --enable-threads=posix --with-arch=i686 --with-tune=generic --enable-libgcj-sublibs CC=gcc-4 CXX=g++-4 CC_FOR_TARGET=gcc-4 CXX_FOR_TARGET=g++-4 GNATMAKE_FOR_TARGET=gnatmake GNATBIND_FOR_TARGET=gnatbind AS=/opt/gcc-tools/bin/as.exe AS_FOR_TARGET=/opt/gcc-tools/bin/as.exe LD=/opt/gcc-tools/bin/ld.exe LD_FOR_TARGET=/opt/gcc-tools/bin/ld.exe --with-ecj-jar=/usr/share/java/ecj.jar
+Target: i686-pc-linux-gnu
+Configured with: /var/tmp/portage/sys-devel/gcc-4.3.4/work/gcc-4.3.4/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.3.4 --includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.4 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.4/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.3.4/info --with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.3.4/include/g++-v4 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --disable-fixed-point --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-multilib --enable-libmudflap --disable-libssp --enable-libgomp --disable-libgcj --with-arch=i686 --enable-languages=c,c++,treelang,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --with-bugurl=http://bugs.gentoo.org/ --with-pkgversion='Gentoo 4.3.4 p1.0, pie-10.1.5'
 Thread model: posix
-gcc version 4.3.4 20090804 (release) 1 (GCC
+gcc version 4.3.4 (Gentoo 4.3.4 p1.0, pie-10.1.5
 configure:3450: $? = 0
 configure:3457: gcc -V >&5
 gcc: '-V' option must have argument
@@ -183,9 +181,9 @@ configure:4285: result: /bin/grep -E
 configure:4290: checking for ANSI C header files
 configure:4320: gcc -c -g -O2  conftest.c >&5
 configure:4327: $? = 0
-configure:4426: gcc -o conftest.exe -g -O2   conftest.c  >&5
+configure:4426: gcc -o conftest -g -O2   conftest.c  >&5
 configure:4430: $? = 0
-configure:4436: ./conftest.exe
+configure:4436: ./conftest
 configure:4440: $? = 0
 configure:4458: result: yes
 configure:4482: checking for sys/types.h
@@ -232,8 +230,8 @@ configure:4660: checking for _Bool
 configure:4688: gcc -c -g -O2  conftest.c >&5
 configure:4695: $? = 0
 configure:4722: gcc -c -g -O2  conftest.c >&5
-conftest.c: In function ‘main’:
-conftest.c:56: error: expected expression before ‘)’ token
+conftest.c: In function 'main':
+conftest.c:56: error: expected expression before ')' token
 configure:4729: $? = 1
 configure: failed program was:
 | /* confdefs.h.  */
@@ -305,8 +303,8 @@ configure:4841: checking for size_t
 configure:4869: gcc -c -g -O2  conftest.c >&5
 configure:4876: $? = 0
 configure:4903: gcc -c -g -O2  conftest.c >&5
-conftest.c: In function ‘main’:
-conftest.c:58: error: expected expression before ‘)’ token
+conftest.c: In function 'main':
+conftest.c:58: error: expected expression before ')' token
 configure:4910: $? = 1
 configure: failed program was:
 | /* confdefs.h.  */
@@ -387,7 +385,7 @@ generated by GNU Autoconf 2.63.  Invocation command line was
   CONFIG_COMMANDS = 
   $ ./config.status 
 
-on c2007
+on vaio_z
 
 config.status:778: creating Makefile
 config.status:778: creating Rakefile
@@ -426,7 +424,6 @@ ac_cv_env_host_alias_set=
 ac_cv_env_host_alias_value=
 ac_cv_env_target_alias_set=
 ac_cv_env_target_alias_value=
-ac_cv_exeext=.exe
 ac_cv_header_inttypes_h=yes
 ac_cv_header_memory_h=yes
 ac_cv_header_stdbool_h=yes
@@ -441,7 +438,7 @@ ac_cv_header_unistd_h=yes
 ac_cv_objext=o
 ac_cv_path_EGREP='/bin/grep -E'
 ac_cv_path_GREP=/bin/grep
-ac_cv_path_install='/bin/install -c'
+ac_cv_path_install='/usr/bin/install -c'
 ac_cv_path_mkdir=/bin/mkdir
 ac_cv_prog_AWK=gawk
 ac_cv_prog_CPP='gcc -E'
@@ -460,14 +457,14 @@ am_cv_CXX_dependencies_compiler_type=gcc3
 ## Output variables. ##
 ## ----------------- ##
 
-ACLOCAL='${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run aclocal-1.10'
+ACLOCAL='${SHELL} /home/derui/develop/utakata/missing --run aclocal-1.10'
 AMDEPBACKSLASH='\'
 AMDEP_FALSE='#'
 AMDEP_TRUE=''
-AMTAR='${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run tar'
-AUTOCONF='${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run autoconf'
-AUTOHEADER='${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run autoheader'
-AUTOMAKE='${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run automake-1.10'
+AMTAR='${SHELL} /home/derui/develop/utakata/missing --run tar'
+AUTOCONF='${SHELL} /home/derui/develop/utakata/missing --run autoconf'
+AUTOHEADER='${SHELL} /home/derui/develop/utakata/missing --run autoheader'
+AUTOMAKE='${SHELL} /home/derui/develop/utakata/missing --run automake-1.10'
 AWK='gawk'
 CC='gcc'
 CCDEPMODE='depmode=gcc3'
@@ -477,14 +474,14 @@ CPPFLAGS=''
 CXX='g++'
 CXXDEPMODE='depmode=gcc3'
 CXXFLAGS='-g -O2'
-CYGPATH_W='cygpath -w'
+CYGPATH_W='echo'
 DEFS='-DHAVE_CONFIG_H'
 DEPDIR='.deps'
 ECHO_C=''
 ECHO_N='-n'
 ECHO_T=''
 EGREP='/bin/grep -E'
-EXEEXT='.exe'
+EXEEXT=''
 GREP='/bin/grep'
 INSTALL_DATA='${INSTALL} -m 644'
 INSTALL_PROGRAM='${INSTALL}'
@@ -494,7 +491,7 @@ LDFLAGS=''
 LIBOBJS=''
 LIBS=''
 LTLIBOBJS=''
-MAKEINFO='${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run makeinfo'
+MAKEINFO='${SHELL} /home/derui/develop/utakata/missing --run makeinfo'
 MKDIR_P='/bin/mkdir -p'
 OBJEXT='o'
 PACKAGE='utakata'
@@ -531,7 +528,7 @@ host_alias=''
 htmldir='${docdir}'
 includedir='${prefix}/include'
 infodir='${datarootdir}/info'
-install_sh='$(SHELL) /cygdrive/c/meadow/develop/utakata/install-sh'
+install_sh='$(SHELL) /home/derui/develop/utakata/install-sh'
 libdir='${exec_prefix}/lib'
 libexecdir='${exec_prefix}/libexec'
 localedir='${datarootdir}/locale'
index 4bbfd37..e1726bb 100755 (executable)
@@ -363,9 +363,9 @@ Copyright (C) 2008 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='/cygdrive/c/meadow/develop/utakata'
+ac_pwd='/home/derui/develop/utakata'
 srcdir='.'
-INSTALL='/bin/install -c'
+INSTALL='/usr/bin/install -c'
 MKDIR_P='/bin/mkdir -p'
 AWK='gawk'
 test -n "$AWK" || AWK=awk
@@ -554,7 +554,7 @@ S["am__quote"]=""
 S["am__include"]="include"
 S["DEPDIR"]=".deps"
 S["OBJEXT"]="o"
-S["EXEEXT"]=".exe"
+S["EXEEXT"]=""
 S["ac_ct_CXX"]="g++"
 S["CPPFLAGS"]=""
 S["LDFLAGS"]=""
@@ -562,7 +562,7 @@ S["CXXFLAGS"]="-g -O2"
 S["CXX"]="g++"
 S["am__untar"]="${AMTAR} xf -"
 S["am__tar"]="${AMTAR} chof - \"$$tardir\""
-S["AMTAR"]="${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run tar"
+S["AMTAR"]="${SHELL} /home/derui/develop/utakata/missing --run tar"
 S["am__leading_dot"]="."
 S["SET_MAKE"]=""
 S["AWK"]="gawk"
@@ -570,15 +570,15 @@ S["mkdir_p"]="/bin/mkdir -p"
 S["MKDIR_P"]="/bin/mkdir -p"
 S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s"
 S["STRIP"]=""
-S["install_sh"]="$(SHELL) /cygdrive/c/meadow/develop/utakata/install-sh"
-S["MAKEINFO"]="${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run makeinfo"
-S["AUTOHEADER"]="${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run autoheader"
-S["AUTOMAKE"]="${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run automake-1.10"
-S["AUTOCONF"]="${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run autoconf"
-S["ACLOCAL"]="${SHELL} /cygdrive/c/meadow/develop/utakata/missing --run aclocal-1.10"
+S["install_sh"]="$(SHELL) /home/derui/develop/utakata/install-sh"
+S["MAKEINFO"]="${SHELL} /home/derui/develop/utakata/missing --run makeinfo"
+S["AUTOHEADER"]="${SHELL} /home/derui/develop/utakata/missing --run autoheader"
+S["AUTOMAKE"]="${SHELL} /home/derui/develop/utakata/missing --run automake-1.10"
+S["AUTOCONF"]="${SHELL} /home/derui/develop/utakata/missing --run autoconf"
+S["ACLOCAL"]="${SHELL} /home/derui/develop/utakata/missing --run aclocal-1.10"
 S["VERSION"]="0.0.1"
 S["PACKAGE"]="utakata"
-S["CYGPATH_W"]="cygpath -w"
+S["CYGPATH_W"]="echo"
 S["am__isrc"]=""
 S["INSTALL_DATA"]="${INSTALL} -m 644"
 S["INSTALL_SCRIPT"]="${INSTALL}"
index f464ae5..fdee6e3 100755 (executable)
@@ -42,6 +42,8 @@ class Lexeme {
     kUnsyntaxSplicing,
     kUnquote,
     kUnquoteSplicing,
+    kDatumComment,
+    kSpecialComment,
     kUnToken,
   };
 
index 069564e..2fb47c3 100755 (executable)
@@ -22,7 +22,7 @@ lexer::Lexeme* lexer::BooleanLexer::Lex(reader::EncodingReader* reader) {
   }
 
   unicode::UniString str(unicode::Convert(
-      reader->Read(boolean.ReadToken(reader))));
+      reader->Read(boolean.previous_read_size())));
 
   lexer::TermLexer<term::Delimiter> std_delimiter;
   if (!reader->IsEof() && !std_delimiter.CheckToken(reader)) {
index f76df95..f3cad0b 100755 (executable)
@@ -14,6 +14,34 @@ namespace term = utakata::lexer::term;
 namespace unicode = utakata::unicode;
 
 // 宣言のコメントを参照してください。
+bool lexer::detail::NestedLexer::Lex(reader::EncodingReader* reader) {
+  lexer::TermLexer<term::NestedCommentOpen> nested_open;
+  lexer::TermLexer<term::NestedCommentClose> nested_close;
+
+  if (!nested_open.CheckToken(reader)) {
+    return false;
+  }
+
+  reader->Read(nested_open.previous_read_size());
+  int nest_counter = 1;
+  while (!reader->IsEof() && nest_counter > 0) {
+    if (nested_open.CheckToken(reader)) {
+      reader->Read(nested_open.previous_read_size());
+      ++nest_counter;
+
+    } else if (nested_close.CheckToken(reader)) {
+      reader->Read(nested_close.previous_read_size());
+      --nest_counter;
+
+    } else {
+      reader->Read();
+    }
+  }
+
+  return true;
+}
+
+// 宣言のコメントを参照してください。
 lexer::Lexeme* lexer::CommentLexer::Lex(reader::EncodingReader* reader) {
   lexer::TermLexer<term::DatumComment> datum_comment;
   lexer::TermLexer<term::SpecialComment> special_comment;
@@ -23,13 +51,30 @@ lexer::Lexeme* lexer::CommentLexer::Lex(reader::EncodingReader* reader) {
     SkipByLineComment(reader);
 
   } else if (datum_comment.CheckToken(reader)) {
-    return lexer::Lexeme(unicode::UniString(), lexer::Lexeme::kDatumComment);
+    reader->Read(datum_comment.previous_read_size());
+    return new lexer::Lexeme(unicode::UniString(), lexer::Lexeme::kDatumComment);
+
   } else if (special_comment.CheckToken(reader)) {
-    reader->Read(special_comment.ReadToken(reader));
-    return lexer::Lexeme(unicode::UniString(), lexer::Lexeme::kSpecialComment);
+    reader->Read(special_comment.previous_read_size());
+    return new lexer::Lexeme(unicode::UniString(), lexer::Lexeme::kSpecialComment);
   } else {
     lexer::detail::NestedLexer().Lex(reader);
   }
 
   return NULL;
 }
+
+// ; の発見時点でこの関数が呼ばれるため、内部で先頭の一文字を
+// 読み飛ばしています。
+void lexer::CommentLexer::SkipByLineComment(reader::EncodingReader* reader) {
+  reader->Read();
+
+  lexer::TermLexer<term::LineEnding> line_ending;
+  while (!reader->IsEof()) {
+    if (line_ending.CheckToken(reader)) {
+      reader->Read(line_ending.previous_read_size());
+      break;
+    }
+    reader->Read();
+  }
+}
index 3ef3f75..e7c222c 100755 (executable)
@@ -13,6 +13,19 @@ class EncodingReader;
 
 namespace lexer {
 
+namespace detail {
+
+// #| と |#に囲まれた領域をコメントとして読み飛ばします。
+// 正しくネストされている限り、無制限にネストさせることができます。
+class NestedLexer {
+ public:
+
+  // readerの先頭から、<nested comment>であるかをチェックし、<nested comment>
+  // に該当する部分の読み飛ばしを行います。
+  bool Lex(reader::EncodingReader* reader);
+};
+}
+
 class Lexeme;
 // <comment>に一致する字句を解釈する機能を提供します。
 class CommentLexer : public IPartOfLexer {
@@ -26,6 +39,11 @@ class CommentLexer : public IPartOfLexer {
   // Parserは、受け取ったLexemeに対して処理を行うことができますが、
   // コメントが必ず読み飛ばされることを保証しなければなりません。
   lexer::Lexeme* Lex(reader::EncodingReader* reader);
+
+ private:
+
+  // ; 以降の行末までを読み飛ばします。
+  void SkipByLineComment(reader::EncodingReader* reader);
 };
 }
 }
index 01c53b2..d782c4c 100755 (executable)
@@ -76,7 +76,7 @@ bool lexer::detail::PeculiarIdentifierLexer::Lex(reader::EncodingReader* reader,
   }
 
   code->Append(unicode::Convert(reader->Read(
-      peculiar_ident.ReadToken(reader))));
+      peculiar_ident.previous_read_size())));
 
   if (*code == unicode::Convert("->")) {
     lexer::TermLexer<term::Delimiter> delim;
index 8320973..41603d6 100755 (executable)
@@ -27,7 +27,7 @@ bool lexer::detail::MantissaWidthLexer::Lex(reader::EncodingReader* reader,
     if (!digit_10.CheckToken(reader)) {
       break;
     }
-    unicode::Append(code, reader->Read(digit_10.ReadToken(reader)));
+    unicode::Append(code, reader->Read(digit_10.previous_read_size()));
   }
 
   const int kMantissaSize = 2;
@@ -49,7 +49,7 @@ bool lexer::detail::SuffixLexer::Lex(reader::EncodingReader* reader,
   }
 
   unicode::UniString code(unicode::Convert(
-      reader->Read(marker.ReadToken(reader))));
+      reader->Read(marker.previous_read_size())));
 
   lexer::TermLexer<term::Sign> sign;
   lexer::TermLexer<term::NumberDigit<10> > digit_10;
@@ -59,7 +59,7 @@ bool lexer::detail::SuffixLexer::Lex(reader::EncodingReader* reader,
         "must have sign after `exponent marker'"));
   }
   code.Append(unicode::Convert(
-      reader->Read(marker.ReadToken(reader))));
+      reader->Read(marker.previous_read_size())));
 
   if (!digit_10.CheckToken(reader)) {
     THROW_EXCEPTION_(lexer::LexException, unicode::Convert(
@@ -71,7 +71,7 @@ bool lexer::detail::SuffixLexer::Lex(reader::EncodingReader* reader,
       break;
     }
     code.Append(unicode::Convert(
-        reader->Read(marker.ReadToken(reader))));
+        reader->Read(marker.previous_read_size())));
   }
 
   string->Append(code);
@@ -111,7 +111,7 @@ bool lexer::detail::DecimalLexer::Lex(reader::EncodingReader* reader,
 
     unicode::UniString digit_string;
     while (!reader->IsEof() && digit.CheckToken(reader)) {
-      unicode::Append(digit_string, reader->Read(digit.ReadToken(reader)));
+      unicode::Append(digit_string, reader->Read(digit.previous_read_size()));
     }
 
     if (digit_string.IsEmpty()) {
@@ -148,7 +148,7 @@ bool lexer::detail::DecimalLexer::InnerLexFloating(
   code.Append(ch);
 
   while (!reader->IsEof() && digit.CheckToken(reader)) {
-    unicode::Append(code, reader->Read(digit.ReadToken(reader)));
+    unicode::Append(code, reader->Read(digit.previous_read_size()));
   }
 
   if (!suffix.Lex(reader, &code)) {
index 7cfe4d0..3ff9194 100644 (file)
@@ -44,14 +44,14 @@ class PrefixLexer {
 
     unicode::UniString code;
     if (exactness.CheckToken(reader)) {
-      unicode::Append(code, reader->Read(exactness.ReadToken(reader)));
+      unicode::Append(code, reader->Read(exactness.previous_read_size()));
 
       if (CheckNextTokenInPrefix(&radix, reader, &code)) {
         string->Append(code);
         return true;
       }
     } else if (radix.CheckToken(reader)) {
-      unicode::Append(code, reader->Read(radix.ReadToken(reader)));
+      unicode::Append(code, reader->Read(radix.previous_read_size()));
 
       if (CheckNextTokenInPrefix(&exactness, reader, &code)) {
         string->Append(code);
@@ -75,7 +75,7 @@ class PrefixLexer {
     namespace unicode = utakata::unicode;
 
     if (predicate->CheckToken(reader)) {
-      unicode::Append(*string, reader->Read(predicate->ReadToken(reader)));
+      unicode::Append(*string, reader->Read(predicate->previous_read_size()));
       return true;
     }
     return false;
@@ -100,7 +100,7 @@ class UIntegerLexer {
     lexer::TermLexer<term::NumberDigit<N> > digit;
     unicode::UniString code;
     while (!reader->IsEof() && digit.CheckToken(reader)) {
-      unicode::Append(code, reader->Read(digit.ReadToken(reader)));
+      unicode::Append(code, reader->Read(digit.previous_read_size()));
     }
 
     if (code.IsEmpty()) {
@@ -229,7 +229,7 @@ class RealLexer {
 
     unicode::UniString code;
     if (sign.CheckToken(reader)) {
-      unicode::Append(code, reader->Read(sign.ReadToken(reader)));
+      unicode::Append(code, reader->Read(sign.previous_read_size()));
       if (ureal.Lex(reader, &code)) {
         string->Append(code);
         return true;
@@ -288,10 +288,10 @@ class ComplexLexer {
       } else {
         lexer::TermLexer<term::Sign> sign;
         if (sign.CheckToken(reader)) {
-          unsigned int read_size = sign.ReadToken(reader);
+          unsigned int read_size = sign.previous_read_size();
 
           if (read_size != 0) {
-            unicode::Append(code, reader->Read(sign.ReadToken(reader)));
+            unicode::Append(code, reader->Read(sign.previous_read_size()));
             if  (!CheckImaginaryPart(reader, &code)) {
               THROW_EXCEPTION_(lexer::LexException, unicode::Convert(
                   "error imaginary part. read flag only."));
@@ -304,7 +304,7 @@ class ComplexLexer {
     } else {
       lexer::TermLexer<term::Sign> sign;
       if (sign.CheckToken(reader)) {
-        unsigned int read_size = sign.ReadToken(reader);
+        unsigned int read_size = sign.previous_read_size();
         if (read_size == 0) {
           return false;
         } else if (!CheckImaginaryPart(reader, &code)) {
@@ -335,7 +335,7 @@ class ComplexLexer {
 
     if (!ureal.Lex(reader, string)) {
       if (naninf.CheckToken(reader)) {
-        unicode::Append(*string, reader->Read(naninf.ReadToken(reader)));
+        unicode::Append(*string, reader->Read(naninf.previous_read_size()));
       }
     }
 
index ebe049a..210b3ff 100755 (executable)
@@ -101,7 +101,7 @@ void lexer::EscapeLexer::ReadIntralines(reader::EncodingReader* reader) {
   lexer::TermLexer<term::LineEnding> lineend;
 
   while (intraline.CheckToken(reader) && !reader->IsEof()) {
-    reader->Read(intraline.ReadToken(reader));
+    reader->Read(intraline.previous_read_size());
   }
 
   if (!lineend.CheckToken(reader)) {
@@ -109,10 +109,10 @@ void lexer::EscapeLexer::ReadIntralines(reader::EncodingReader* reader) {
     THROW_EXCEPTION_(lexer::LexException,
                      unicode::Convert("must line ending after whitespaces"));
   }
-  reader->Read(lineend.ReadToken(reader));
+  reader->Read(lineend.previous_read_size());
 
   while (intraline.CheckToken(reader) && !reader->IsEof()) {
-    reader->Read(intraline.ReadToken(reader));
+    reader->Read(intraline.previous_read_size());
   }
 }
 
@@ -127,7 +127,7 @@ lexer::Lexeme* lexer::StringLexer::Lex(reader::EncodingReader* reader) {
   if (!string_delimiter.CheckToken(reader)) {
     return NULL;
   }
-  reader->Read(string_delimiter.ReadToken(reader));
+  reader->Read(string_delimiter.previous_read_size());
 
   lexer::EscapeLexer escape;
   unicode::UniString str;
@@ -135,7 +135,7 @@ lexer::Lexeme* lexer::StringLexer::Lex(reader::EncodingReader* reader) {
 
   while (!reader->IsEof()) {
     if (string_delimiter.CheckToken(reader)) {
-      reader->Read(string_delimiter.ReadToken(reader));
+      reader->Read(string_delimiter.previous_read_size());
       syntax_ok = true;
       break;
     }
index e91020a..19f3e7f 100755 (executable)
@@ -18,8 +18,8 @@ bool term::Delimiter::operator()(reader::IReader* reader,
     case '"':
     case ';':
     case '#':
-      *size = 1;
-      return true;
+        *size = 1;
+    return true;
     default:
       return term::Whitespace()(reader, size);
   }
@@ -28,7 +28,7 @@ bool term::Delimiter::operator()(reader::IReader* reader,
 
 // 宣言のコメントを参照してください。
 bool term::Whitespace::operator()(reader::IReader* reader,
-                                         unsigned int* size) {
+                                  unsigned int* size) {
   unicode::UniChar ch(reader->Peek());
   switch (ch.rawcode()) {
     case '\r':                  // carriage return
@@ -37,8 +37,8 @@ bool term::Whitespace::operator()(reader::IReader* reader,
     case '\t':                  // tab
     case '\v':                  // vertical tab
     case '\f':                  // page
-      *size = 1;
-      return true;
+        *size = 1;
+    return true;
     default:
       return false;
   }
@@ -47,7 +47,7 @@ bool term::Whitespace::operator()(reader::IReader* reader,
 // targetが\rである場合、次の一文字のチェックも必要となりますが、
 // \r単体である場合でも、改行として見做されます。
 bool term::LineEnding::operator()(reader::IReader* reader,
-                                         unsigned int* size) {
+                                  unsigned int* size) {
   unicode::UniChar ch(reader->Peek());
   switch (ch.rawcode()) {
     case '\n':
@@ -122,7 +122,7 @@ bool term::Letter::operator()(reader::IReader* reader,
 
 // 宣言のコメントを参照してください。
 bool term::SpecialInitial::operator()(reader::IReader* reader,
-                              unsigned int* size) {
+                                      unsigned int* size) {
   unicode::UniChar ch(reader->Peek());
   switch (ch.rawcode()) {
     case kExclamation:
@@ -213,8 +213,8 @@ bool term::ExponentMarker::operator()(reader::IReader* reader,
     case 'F':
     case 'd':
     case 'D':
-      *size = 1;
-      return true;
+        *size = 1;
+    return true;
     default:
       return false;
   }
@@ -281,7 +281,7 @@ bool term::DatumComment::operator()(reader::IReader* reader,
 
 // 宣言のコメントを参照してください。
 bool term::SpecialComment::operator()(reader::IReader* reader,
-                                    unsigned int* size) {
+                                      unsigned int* size) {
   unicode::UniString code(unicode::Convert(
       reader->Peek(kSpecialCommentReadSize)));
   if (code == unicode::Convert("#!r6rs")) {
@@ -290,3 +290,27 @@ bool term::SpecialComment::operator()(reader::IReader* reader,
   }
   return false;
 }
+
+// 宣言のコメントを参照してください。
+bool term::NestedCommentOpen::operator()(reader::IReader* reader,
+                                         unsigned int* size) {
+  unicode::UniString code(unicode::Convert(
+      reader->Peek(kNestedCommentOpenReadSize)));
+  if (code == unicode::Convert("#|")) {
+    *size = kNestedCommentOpenReadSize;
+    return true;
+  }
+  return false;
+}
+
+// 宣言のコメントを参照してください。
+bool term::NestedCommentClose::operator()(reader::IReader* reader,
+                                          unsigned int* size) {
+  unicode::UniString code(unicode::Convert(
+      reader->Peek(kNestedCommentCloseReadSize)));
+  if (code == unicode::Convert("|#")) {
+    *size = kNestedCommentCloseReadSize;
+    return true;
+  }
+  return false;
+}
index a914568..4fe209e 100644 (file)
@@ -341,6 +341,26 @@ struct SpecialComment {
   // trueを返した場合、sizeにはトークンの文字数が返却されます。
   bool operator()(reader::IReader* reader, unsigned int* size);
 };
+
+// #| のチェックを提供します。
+struct NestedCommentOpen {
+  // readerからチェックのために読出すサイズです。
+  static const int kNestedCommentOpenReadSize = 2;
+
+  // readerの先頭から、#|に一致するかどうかを返します。
+  // trueを返した場合、sizeにはトークンの文字数が返却されます。
+  bool operator()(reader::IReader* reader, unsigned int* size);
+};
+
+// |# のチェックを提供します。
+struct NestedCommentClose {
+  // readerからチェックのために読出すサイズです。
+  static const int kNestedCommentCloseReadSize = 2;
+
+  // readerの先頭から、|#に一致するかどうかを返します。
+  // trueを返した場合、sizeにはトークンの文字数が返却されます。
+  bool operator()(reader::IReader* reader, unsigned int* size);
+};
 }
 }
 }
index a6698bc..c531daf 100755 (executable)
@@ -39,9 +39,8 @@ class TermLexerBase {
   // 渡されたreaderの読み出し位置は更新されません。
   virtual bool CheckToken(reader::EncodingReader* reader) = 0;
 
-  // 渡されたreaderより、T()によって判別されたトークンを読み飛ばします。
-  // 読み出しが行われた場合、readerの読み出し位置は更新されます。
-  virtual int ReadToken(reader::EncodingReader* reader) = 0;
+  // 直前に実行されたCheckTokenの結果を返します。
+  virtual int previous_read_size() const = 0;
 };
 
 // 関数オブジェクトを渡すことで、渡した関数オブジェクトによって
@@ -53,7 +52,7 @@ template<class T>
 class TermLexer : public TermLexerBase {
  public:
 
-  TermLexer() : checker_() {}
+  TermLexer() : checker_(), previous_read_size_(0) {}
 
   // 渡されたreaderの先頭から、T()によって判別されるトークンが
   // 読出せる場合、trueが返されます。
@@ -61,25 +60,24 @@ class TermLexer : public TermLexerBase {
   bool CheckToken(reader::EncodingReader* reader) {
     unsigned int size = 0;
     if (!checker_(reader, &size)) {
+      previous_read_size_ = size;
       return false;
     }
+    previous_read_size_ = size;
     return true;
   }
 
-  // 渡されたreaderより、T()によって判別されたトークンを読み飛ばします。
-  // 読み出しが行われた場合、readerの読み出し位置は更新されます。
-  int ReadToken(reader::EncodingReader* reader) {
-    unsigned int size = 0;
-    if (!checker_(reader, &size)) {
-      return 0;
-    }
-    return size;
-  }
+  // 前回読み出しが行われた結果を取得します。
+  // CheckTokenがfalseを返した場合、0が設定されます。
+  int previous_read_size() const {return previous_read_size_;}
 
  private:
 
   // ()を定義した関数オブジェクトです。
   T checker_;
+
+  // 前回CheckTokenを実行した結果です。
+  int previous_read_size_;
 };
 
 }
index f4c634b..512faa7 100755 (executable)
@@ -20,7 +20,7 @@ class CommentLexerTest : public ::testing::Test {
     gen.reset(new textarrayformat::TextArrayGenerator("========="));
     gen->Punctuate("(hoge) ; comment \nhuga");
     gen->Punctuate("#!r6rs");
-    gen->Punctuate("#| hoge \n #|ss");
+    gen->Punctuate("#| hoge \n |#ss");
     gen->Punctuate("#| \nhoge #|huga|# \n|#123");
     gen->Punctuate("#;data");
   }
@@ -53,7 +53,9 @@ TEST_F(CommentLexerTest, SpecialComment) {
   lexer::CommentLexer lexer;
   akebono::scoped_ptr<lexer::Lexeme> l(lexer.Lex(&reader));
 
-  EXPECT_TRUE(l.get() ==  NULL);
+  EXPECT_TRUE(l.get() != NULL);
+  EXPECT_EQ(l->type(), lexer::Lexeme::kSpecialComment);
+  reader.Read();
   EXPECT_TRUE(reader.IsEof());
 }
 
@@ -65,7 +67,7 @@ TEST_F(CommentLexerTest, BlockCommentNoNested) {
   lexer::CommentLexer lexer;
   l.reset(lexer.Lex(&reader));
 
-  EXPECT_TRUE(l.get() ==  NULL);
+  EXPECT_TRUE(l.get() == NULL);
   unicode::UniString tmp(unicode::Convert(reader.Read(2)));
   EXPECT_TRUE(tmp == unicode::Convert("ss"));
 }
@@ -78,7 +80,7 @@ TEST_F(CommentLexerTest, NestedBlockComment) {
   lexer::CommentLexer lexer;
   l.reset(lexer.Lex(&reader));
 
-  EXPECT_TRUE(lexer.Lex(&reader));
+  EXPECT_TRUE(lexer.Lex(&reader) == NULL);
   unicode::UniString tmp(unicode::Convert(reader.Read(3)));
   EXPECT_TRUE(tmp == unicode::Convert("123"));
 }
@@ -90,11 +92,11 @@ TEST_F(CommentLexerTest, DatumComment) {
   reader::EncodingReader reader(&sr, new transcoder::UTF8Transcoder);
   lexer::CommentLexer lexer;
 
-  // datum comment\82Ì\8fê\8d\87\82É\8cÀ\82è\81A\83g\81[\83N\83\93\82Ì\95Ô\8bp\82ª\95K\97v\82Æ\82È\82è\82Ü\82·\81B
-  // \82±\82ê\82Í#; <interlexeme space> <datum>\82Ì<datum>\82ª\91O\95û\90é\8c¾\82³\82ê\82Ä\82¢\82é
-  // \8aÖ\8cW\8fã\81A\8e\9a\8bå\89ð\90Í\82Å\82Í\82È\82­\8d\\95\89ð\90Í\83\8c\83x\83\8b\82Å\82Ì\83R\83\81\83\93\83g\82ª\95K\97v\82Æ\82È\82é\82½\82ß\81A
-  // \82»\82Ì\94»\95Ê\82ª\95K\97v\82Å\82 \82é\82½\82ß\82Å\82·\81B
-  // datum comment\82Í\81A\82»\82Ì\90«\8e¿\8fã\81A\8aô\8fd\82É\82à\83l\83X\83g\82·\82é\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B
+  // datum commentの場合に限り、トークンの返却が必要となります。
+  // これは#; <interlexeme space> <datum>の<datum>が前方宣言されている
+  // 関係上、字句解析ではなく構文解析レベルでのコメントが必要となるため、
+  // その判別が必要であるためです。
+  // datum commentは、その性質上、幾重にもネストする可能性があります。
   l.reset(lexer.Lex(&reader));
   EXPECT_TRUE(l.get() != NULL);
   unicode::UniString tmp(unicode::Convert(reader.Read(4)));