still coding rex1.c

This commit is contained in:
2009-11-20 23:12:27 +00:00
parent a6162f3eea
commit 1d5be1f982
45 changed files with 6140 additions and 12759 deletions

View File

@ -1,8 +1,9 @@
# Makefile.in generated by automake 1.10.2 from Makefile.am.
# Makefile.in generated by automake 1.11 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
@ -16,8 +17,9 @@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@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
@ -45,14 +47,29 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/include/qse/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
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 = `echo $$p | sed -e 's|^.*/||'`;
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__installdirs = "$(DESTDIR)$(libdir)"
libLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(lib_LTLIBRARIES)
libqsecmn_la_DEPENDENCIES =
am_libqsecmn_la_OBJECTS = mem.lo chr.lo chr_cnv.lo rex.lo rex1.lo \
@ -66,6 +83,7 @@ libqsecmn_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
DEFAULT_INCLUDES =
depcomp = $(SHELL) $(top_srcdir)/ac/au/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@ -143,6 +161,7 @@ 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@
QSE_SIZEOF_CHAR = @QSE_SIZEOF_CHAR@
@ -247,9 +266,9 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/cmn/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --foreign lib/cmn/Makefile
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/cmn/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign lib/cmn/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
@ -267,23 +286,28 @@ $(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):
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
list2=; for p in $$list; do \
if test -f $$p; then \
f=$(am__strip_dir) \
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
list2="$$list2 $$p"; \
else :; fi; \
done
done; \
test -z "$$list2" || { \
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
}
uninstall-libLTLIBRARIES:
@$(NORMAL_UNINSTALL)
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
p=$(am__strip_dir) \
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
for p in $$list; do \
$(am__strip_dir) \
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
done
clean-libLTLIBRARIES:
@ -331,21 +355,21 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@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@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@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) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
@ -368,7 +392,7 @@ tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
@ -376,29 +400,34 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
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)
tags=; \
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)$$tags$$unique" \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@ -419,13 +448,17 @@ distdir: $(DISTFILES)
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 $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
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 \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
@ -456,6 +489,7 @@ 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"
@ -477,6 +511,8 @@ dvi-am:
html: html-am
html-am:
info: info-am
info-am:
@ -485,18 +521,28 @@ install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-libLTLIBRARIES
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
@ -535,6 +581,7 @@ uninstall-am: uninstall-libLTLIBRARIES
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am uninstall-libLTLIBRARIES
# 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:

View File

@ -1,5 +1,5 @@
/*
* $Id: rex.c 300 2009-11-13 14:01:57Z hyunghwan.chung $
* $Id: rex.c 304 2009-11-20 05:12:27Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -341,62 +341,6 @@ static struct __char_class_t __char_class[] =
{ QSE_NULL, 0, QSE_NULL }
};
#if 0
qse_rex_t* qse_rex_open (qse_mmgr_t* mmgr, qse_size_t xtn)
{
qse_rex_t* rex;
if (mmgr == QSE_NULL)
{
mmgr = QSE_MMGR_GETDFL();
QSE_ASSERTX (mmgr != QSE_NULL,
"Set the memory manager with QSE_MMGR_SETDFL()");
if (mmgr == QSE_NULL) return QSE_NULL;
}
rex = (qse_rex_t*) QSE_MMGR_ALLOC (mmgr, QSE_SIZEOF(qse_rex_t) + xtn);
if (rex == QSE_NULL) return QSE_NULL;
QSE_MEMSET (rex, 0, QSE_SIZEOF(*rex));
rex->mmgr = mmgr;
return rex;
}
void qse_rex_close (qse_rex_t* rex)
{
if (rex->code != QSE_NULL) qse_freerex (rex->mmgr, rex->code);
QSE_MMGR_FREE (rex->mmgr, rex);
}
int qse_rex_build (qse_rex_t* rex, const qse_char_t* ptn, qse_size_t len)
{
void* code;
code = qse_buildrex (
rex->mmgr, rex->depth.build, 0,
ptn, len, &rex->errnum);
if (code == QSE_NULL) return -1;
if (rex->code != QSE_NULL) qse_freerex (rex->mmgr, rex->code);
rex->code = code;
return 0;
}
int qse_rex_match (
qse_rex_t* rex,
const qse_char_t* str, qse_size_t len,
const qse_char_t* substr, qse_size_t sublen, qse_cstr_t* match)
{
return qse_matchrex (
rex->mmgr, rex->depth.match, rex->code, rex->option,
str, len, substr, sublen, match, &rex->errnum);
}
#endif
void* qse_buildrex (
qse_mmgr_t* mmgr, qse_size_t depth, int option,
const qse_char_t* ptn, qse_size_t len, qse_rex_errnum_t* errnum)

View File

@ -25,14 +25,6 @@
#define OCC_MAX QSE_TYPE_MAX(qse_size_t)
struct qse_rex_t
{
QSE_DEFINE_COMMON_FIELDS (rex)
int errnum;
qse_rex_node_t* code;
};
typedef struct comp_t comp_t;
struct comp_t
{
@ -45,11 +37,6 @@ struct comp_t
struct
{
enum
{
CT_NORMAL,
CT_SPECIAL
} type;
qse_cint_t value;
int escaped;
} c;
@ -105,6 +92,8 @@ typedef struct cand_t cand_t;
struct cand_t
{
qse_rex_node_t* node;
/* occurrence */
qse_size_t occ;
/* the stack of groups that this candidate belongs to.
@ -118,7 +107,7 @@ struct cand_t
const qse_char_t* mptr;
};
qse_rex_t* qse_rex_open (qse_mmgr_t* mmgr, qse_size_t xtn, void* code)
qse_rex_t* qse_rex_open (qse_mmgr_t* mmgr, qse_size_t xtn, qse_rex_node_t* code)
{
qse_rex_t* rex;
@ -137,7 +126,15 @@ qse_rex_t* qse_rex_open (qse_mmgr_t* mmgr, qse_size_t xtn, void* code)
QSE_MEMSET (rex, 0, QSE_SIZEOF(*rex));
rex->mmgr = mmgr;
/* TODO: must duplicate? */
if (code && code->id != QSE_REX_NODE_START)
{
/* check if the first node is the start node */
QSE_MMGR_FREE (mmgr, rex);
return QSE_NULL;
}
rex->code = code;
return rex;
@ -179,6 +176,16 @@ void qse_rex_close (qse_rex_t* rex)
QSE_MMGR_FREE (rex->mmgr, rex);
}
int qse_rex_getoption (qse_rex_t* rex)
{
return rex->option;
}
void qse_rex_setoption (qse_rex_t* rex, int opts)
{
rex->option = opts;
}
static qse_rex_node_t* newnode (comp_t* c, qse_rex_node_id_t id)
{
qse_rex_node_t* node;
@ -187,7 +194,7 @@ static qse_rex_node_t* newnode (comp_t* c, qse_rex_node_id_t id)
QSE_MMGR_ALLOC (c->rex->mmgr, QSE_SIZEOF(qse_rex_node_t));
if (node == QSE_NULL)
{
// TODO set error code
c->rex->errnum = QSE_REX_ENOMEM;
return QSE_NULL;
}
@ -281,24 +288,15 @@ static qse_rex_node_t* newbranchnode (
#define IS_ESC(com) ((com)->c.escaped)
#define IS_EOF(com) ((com)->c.value == QSE_CHAR_EOF)
enum
{
LEVEL_NORMAL,
LEVEL_CHARSET,
LEVEL_RANGE
};
static int getc (comp_t* com, int level)
static int getc (comp_t* com)
{
if (com->ptr >= com->end)
{
com->c.type = CT_NORMAL;
com->c.value = QSE_CHAR_EOF;
com->c.escaped = 0;
return 0;
}
com->c.type = CT_NORMAL;
com->c.value = *com->ptr++;
com->c.escaped = QSE_FALSE;
@ -403,45 +401,8 @@ static int getc (comp_t* com, int level)
com->c.value = c;
com->c.escaped = QSE_TRUE;
}
return 0;
}
else
{
if (level == LEVEL_NORMAL)
{
if (com->c.value == QSE_T('[') ||
com->c.value == QSE_T('|') ||
com->c.value == QSE_T('^') ||
com->c.value == QSE_T('$') ||
(/*!(com->option & QSE_REX_BUILD_NOBOUND) && TODO:*/
com->c.value == QSE_T('{')) ||
com->c.value == QSE_T('+') ||
com->c.value == QSE_T('?') ||
com->c.value == QSE_T('*') ||
com->c.value == QSE_T('.') ||
com->c.value == QSE_T('(') ||
com->c.value == QSE_T(')'))
{
com->c.type = CT_SPECIAL;
}
}
else if (level == LEVEL_CHARSET)
{
if (com->c.value == QSE_T(']'))
{
com->c.type = CT_SPECIAL;
}
}
else if (level == LEVEL_RANGE)
{
if (com->c.value == QSE_T(',') ||
com->c.value == QSE_T('}'))
{
com->c.type = CT_SPECIAL;
}
}
}
#if 0
com->c = (com->ptr < com->end)? *com->ptr++: QSE_CHAR_EOF;
if (com->c == QSE_CHAR_EOF)
@ -471,47 +432,24 @@ static qse_rex_node_t* comp2 (comp_t* c)
if (n == QSE_NULL) return QSE_NULL;
ge = newgroupendnode (c, n);
if (ge == QSE_NULL)
{
// free n
return QSE_NULL;
}
if (ge == QSE_NULL) return QSE_NULL;
if (getc(c,LEVEL_NORMAL) <= -1)
{
// freere (ge);
// freere (n);
return QSE_NULL;
}
if (getc(c) <= -1) return QSE_NULL;
c->gdepth++;
x = comp0 (c, ge);
if (x == QSE_NULL)
{
// freere (ge);
// freere (n);
return QSE_NULL;
}
if (x == QSE_NULL) return QSE_NULL;
if (!IS_SPE(c,QSE_T(')')))
{
qse_printf (QSE_T("expecting )\n"));
// UNBALANCED PAREN.
// freere (x);
// freere (n);
c->rex->errnum = QSE_REX_EUNBALPAREN;
return QSE_NULL;
}
c->gdepth--;
if (getc(c,LEVEL_NORMAL) <= -1)
{
// freere (x);
// freere (n);
return QSE_NULL;
}
if (getc(c) <= -1) return QSE_NULL;
n->u.g.head = x;
break;
}
@ -519,31 +457,19 @@ qse_printf (QSE_T("expecting )\n"));
case QSE_T('.'):
n = newnode (c, QSE_REX_NODE_ANYCHAR);
if (n == QSE_NULL) return QSE_NULL;
if (getc(c,LEVEL_NORMAL) <= -1)
{
// TODO: error handling..
return QSE_NULL;
}
if (getc(c) <= -1) return QSE_NULL;
break;
case QSE_T('^'):
n = newnode (c, QSE_REX_NODE_BOL);
if (n == QSE_NULL) return QSE_NULL;
if (getc(c,LEVEL_NORMAL) <= -1)
{
// TODO: error handling..
return QSE_NULL;
}
if (getc(c) <= -1) return QSE_NULL;
break;
case QSE_T('$'):
n = newnode (c, QSE_REX_NODE_EOL);
if (n == QSE_NULL) return QSE_NULL;
if (getc(c,LEVEL_NORMAL) <= -1)
{
// TODO: error handling..
return QSE_NULL;
}
if (getc(c) <= -1) return QSE_NULL;
break;
@ -562,11 +488,7 @@ qse_printf (QSE_T("expecting )\n"));
/* normal character */
n = newcharnode (c, c->c.value);
if (n == QSE_NULL) return QSE_NULL;
if (getc(c,LEVEL_NORMAL) <= -1)
{
// TODO: error handling..
return QSE_NULL;
}
if (getc(c) <= -1) return QSE_NULL;
}
n->occ.min = 1;
@ -581,40 +503,25 @@ qse_printf (QSE_T("expecting )\n"));
case QSE_T('?'):
n->occ.min = 0;
n->occ.max = 1;
if (getc(c,LEVEL_NORMAL) <= -1)
{
// TODO: error handling..
//free n
return QSE_NULL;
}
if (getc(c) <= -1) return QSE_NULL;
break;
case QSE_T('*'):
n->occ.min = 0;
n->occ.max = OCC_MAX;
if (getc(c,LEVEL_NORMAL) <= -1)
{
// TODO: error handling..
//free n
return QSE_NULL;
}
if (getc(c) <= -1) return QSE_NULL;
break;
case QSE_T('+'):
n->occ.min = 1;
n->occ.max = OCC_MAX;
if (getc(c,LEVEL_NORMAL) <= -1)
{
// TODO: error handling..
//free n
return QSE_NULL;
}
if (getc(c) <= -1) return QSE_NULL;
break;
/*
case QSE_T('{'):
// TODO:
if (com->rex->option & QSE_REX_BUILD_NOBOUND)
if (!(com->rex->option & QSE_REX_NOBOUND))
{
}
break;
@ -661,7 +568,7 @@ static qse_rex_node_t* comp0 (comp_t* c, qse_rex_node_t* ge)
while (IS_SPE(c,QSE_T('|')))
{
if (getc(c,LEVEL_NORMAL) <= -1)
if (getc(c) <= -1)
{
//freere (left);
return QSE_NULL;
@ -707,7 +614,7 @@ qse_rex_node_t* qse_rex_comp (
c.start = QSE_NULL;
/* read the first character */
if (getc(&c,LEVEL_NORMAL) <= -1) return QSE_NULL;
if (getc(&c) <= -1) return QSE_NULL;
c.start = newstartnode (&c);
if (c.start == QSE_NULL) return QSE_NULL;
@ -751,7 +658,8 @@ static group_t* dupgroups (exec_t* e, group_t* g)
if (yg == QSE_NULL)
{
/* TODO: freegroups (xg); */
/* TODO: set error info */
e->rex->errnum = QSE_REX_ENOMEM;
return QSE_NULL;
}
@ -788,7 +696,7 @@ static group_t* pushgroup (exec_t* e, group_t* group, qse_rex_node_t* newgn)
newg = (group_t*) QSE_MMGR_ALLOC (e->rex->mmgr, QSE_SIZEOF(*newg));
if (newg == QSE_NULL)
{
/* TODO: set error info */
e->rex->errnum = QSE_REX_ENOMEM;
return QSE_NULL;
}
@ -843,7 +751,7 @@ qse_printf (QSE_T("adding %d NA\n"), node->id);*/
QSE_LDA_SIZE(&e->cand.set[e->cand.pending]),
&cand, 1) == (qse_size_t)-1)
{
/* TODO: set error code: ENOERR */
e->rex->errnum = QSE_REX_ENOMEM;
return -1;
}