AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BISON = @BISON@
BUILD_SUBDIRS = @BUILD_SUBDIRS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
FGREP
SED
LIBTOOL
+BISON
ac_ct_AR
AR
RANLIB
esac
+ for ac_prog in bison
+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_BISON+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$BISON"; then
+ ac_cv_prog_BISON="$BISON" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_BISON="$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
+BISON=$ac_cv_prog_BISON
+if test -n "$BISON"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BISON" >&5
+$as_echo "$BISON" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$BISON" && break
+done
+
+ if test -z "$BISON"; then
+ ac_verc_fail=yes
+ else
+ cat >conftest.y <<_ACEOF
+%require "3.0.4"
+%%
+exp:
+_ACEOF
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bison 3.0.4 or newer" >&5
+$as_echo_n "checking for bison 3.0.4 or newer... " >&6; }
+ ac_prog_version=`$BISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+ : ${ac_prog_version:='v. ?.??'}
+ if $BISON conftest.y -o conftest.c 2>/dev/null; then
+ ac_prog_version="$ac_prog_version, ok"
+ ac_verc_fail=no
+ else
+ ac_prog_version="$ac_prog_version, bad"
+ ac_verc_fail=yes
+ fi
+ rm -f conftest.y conftest.c
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5
+$as_echo "$ac_prog_version" >&6; }
+ fi
+ if test $ac_verc_fail = yes; then
+ BISON=:
+ fi
+
+
+if test x$BISON = "x:"; then
+ as_fn_error $? "Building gprofng requires bison 3.0.4 or later." "$LINENO" 5
+fi
+
# Check whether --enable-shared was given.
if test "${enable_shared+set}" = set; then :
enableval=$enable_shared; p=${PACKAGE-default}
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12149 "configure"
+#line 12224 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12255 "configure"
+#line 12330 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
AC_PROG_INSTALL
AC_PROG_RANLIB
AM_PROG_AR
+gl_PROG_BISON([BISON],[3.0.4])
+if test x$BISON = "x:"; then
+ AC_MSG_ERROR([Building gprofng requires bison 3.0.4 or later.])
+fi
AC_DISABLE_SHARED
LT_INIT
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BISON = @BISON@
BUILD_SUBDIRS = @BUILD_SUBDIRS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BISON = @BISON@
BUILD_SUBDIRS = @BUILD_SUBDIRS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
lt_nm_to_check="$lt_nm_to_check nm"
fi
fi
- for lt_tmp_nm in $lt_nm_to_check; do
+ for lt_tmp_nm in "$lt_nm_to_check"; do
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
- case "$lt_tmp_nm" in
+ # Strip out any user-provided options from the nm to test twice,
+ # the first time to test to see if nm (rather than its options) has
+ # an explicit path, the second time to yield a file which can be
+ # nm'ed itself.
+ tmp_nm_path="`$ECHO "$lt_tmp_nm" | sed 's, -.*$,,'`"
+ case "$tmp_nm_path" in
*/*|*\\*) tmp_nm="$lt_tmp_nm";;
*) tmp_nm="$ac_dir/$lt_tmp_nm";;
esac
- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ tmp_nm_to_nm="`$ECHO "$tmp_nm" | sed 's, -.*$,,'`"
+ if test -f "$tmp_nm_to_nm" || test -f "$tmp_nm_to_nm$ac_exeext" ; then
# Check to see if the nm accepts a BSD-compat flag.
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
- case `"$tmp_nm" -B "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -B "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
break
;;
*)
- case `"$tmp_nm" -p "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
+ case `"$tmp_nm" -p "$tmp_nm_to_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
*$tmp_nm*)
lt_cv_path_NM="$tmp_nm -p"
break
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12061 "configure"
+#line 12067 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12167 "configure"
+#line 12173 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
#include "IndexObject.h"
#include "PathTree.h"
#include "Print.h"
+
+// Bison 3.0 doesn't define YY_NULLPTR. I copied this from QLParser.tab.cc.
+// Why this is not in QLParser.tab.hh ? YY_NULLPTR is used in QLParser.tab.hh
+# ifndef YY_NULLPTR
+# if defined __cplusplus && 201103L <= __cplusplus
+# define YY_NULLPTR nullptr
+# else
+# define YY_NULLPTR 0
+# endif
+# endif
#include "QLParser.tab.hh"
#include "DbeView.h"
#include "MemorySpace.h"
}
UserLabel *
-DbeSession::findUserLabel (char *name)
+DbeSession::findUserLabel (const char *name)
{
for (int i = 0, sz = userLabels ? userLabels->size () : 0; i < sz; i++)
{
}
Expression *
-DbeSession::findObjDefByName (char *name)
+DbeSession::findObjDefByName (const char *name)
{
Expression *expr = NULL;
Expression *
DbeSession::ql_parse (const char *expr_spec)
{
- /* (This slight duplication means we don't need to worry about copy
- constructors for the QL::Result, nor about the lifetime of the
- expr_spec.) */
- if (expr_spec != NULL)
- {
- QL::Result result (expr_spec);
- QL::Parser qlparser (result);
- if (qlparser () != 0)
- return NULL;
- return result ();
- }
- else
- {
- QL::Result result;
- QL::Parser qlparser (result);
- if (qlparser () != 0)
- return NULL;
- return result ();
- }
+ if (expr_spec == NULL)
+ expr_spec = "";
+ QL::Result result (expr_spec);
+ QL::Parser qlparser (result);
+ if (qlparser.parse () != 0)
+ return NULL;
+ return result ();
}
Vector<void*> *
char* getPropUName (int propId);
Vector<UserLabel*> *userLabels; // List of er_labels
- UserLabel *findUserLabel (char *name);
+ UserLabel *findUserLabel (const char *name);
DbeJarFile *get_JarFile (const char *name);
void append (UserLabel *lbl);
void append (SourceFile *sf);
void set_need_refind ();
// Find user defined object by name
- Expression *findObjDefByName (char *);
+ Expression *findObjDefByName (const char *);
void get_filter_keywords (Vector<void*> *res);
// Get the Settings class object
$(GPROFNG_NO_SWITCH_CFLAGS)
AM_CXXFLAGS = $(AM_CFLAGS)
+QLParser.tab.cc QLParser.tab.hh: QLParser.yy
+ $(BISON) $^
+
man_MANS = gprofng.1 \
gp-archive.1 \
gp-collect-app.1 \
MAINTAINERCLEANFILES = $(man_MANS)
-EXTRA_DIST = $(man_MANS)
+BUILT_SOURCES = QLParser.tab.hh
+EXTRA_DIST = QLParser.yy $(man_MANS)
pkglib_LTLIBRARIES = $(LIBGPROFNG)
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BISON = @BISON@
BUILD_SUBDIRS = @BUILD_SUBDIRS@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
gp-display-text.1
MAINTAINERCLEANFILES = $(man_MANS)
-EXTRA_DIST = $(man_MANS)
+BUILT_SOURCES = QLParser.tab.hh
+EXTRA_DIST = QLParser.yy $(man_MANS)
pkglib_LTLIBRARIES = $(LIBGPROFNG)
libgprofng_la_SOURCES = $(CCSOURCES) $(CSOURCES)
libgprofng_la_LDFLAGS = -version-info 0:0:0
@BUILD_MAN_TRUE@ | sed 's/See also:/\.SH SEE ALSO/' | sed 's/Documentation:/.SH DOCUMENTATION/' \
@BUILD_MAN_TRUE@ | sed 's/Limitations:/.SH LIMITATIONS/'
-all: all-am
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
.SUFFIXES: .c .cc .lo .o .obj
top_distdir="$(top_distdir)" distdir="$(distdir)" \
dist-hook
check-am: all-am
-check: check-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(MANS) $(DATA)
installdirs:
for dir in "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(dbedir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: install-am
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
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)
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
uninstall-man: uninstall-man1
-.MAKE: install-am install-strip
+.MAKE: all check install install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
clean-binPROGRAMS clean-generic clean-libtool \
.PRECIOUS: Makefile
+QLParser.tab.cc QLParser.tab.hh: QLParser.yy
+ $(BISON) $^
+
@BUILD_MAN_TRUE@gprofng.1: $(srcdir)/gprofng.cc $(common_mandeps) | ./gprofng$(EXEEXT)
@BUILD_MAN_TRUE@ $(AM_V_GEN)_BUILDING_MANPAGE=1 $(HELP2MAN) $(HELP2MAN_OPT) \
@BUILD_MAN_TRUE@ --name=$(TEXT_GPROFNG) ./gprofng$(EXEEXT) $(H2M_FILTER) > $@
+++ /dev/null
-// A Bison parser, made by GNU Bison 3.7.5.
-
-// Skeleton implementation for Bison LALR(1) parsers in C++
-
-// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-// As a special exception, you may create a larger work that contains
-// part or all of the Bison parser skeleton and distribute that work
-// under terms of your choice, so long as that work isn't itself a
-// parser generator using the skeleton or a modified version thereof
-// as a parser skeleton. Alternatively, if you modify or redistribute
-// the parser skeleton itself, you may (at your option) remove this
-// special exception, which will cause the skeleton and the resulting
-// Bison output files to be licensed under the GNU General Public
-// License without this special exception.
-
-// This special exception was added by the Free Software Foundation in
-// version 2.2 of Bison.
-
-// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
-// especially those whose name start with YY_ or yy_. They are
-// private implementation details that can be changed or removed.
-
-// "%code top" blocks.
-#line 28 "QLParser.yy"
-
-#include <stdio.h>
-#include <string.h>
-#include <string>
-
-#line 45 "QLParser.tab.cc"
-
-
-
-
-#include "QLParser.tab.hh"
-
-
-// Unqualified %code blocks.
-#line 42 "QLParser.yy"
-
-namespace QL
-{
- static QL::Parser::symbol_type yylex (QL::Result &result);
-}
-
-#line 61 "QLParser.tab.cc"
-
-
-#ifndef YY_
-# if defined YYENABLE_NLS && YYENABLE_NLS
-# if ENABLE_NLS
-# include <libintl.h> // FIXME: INFRINGES ON USER NAME SPACE.
-# define YY_(msgid) dgettext ("bison-runtime", msgid)
-# endif
-# endif
-# ifndef YY_
-# define YY_(msgid) msgid
-# endif
-#endif
-
-
-// Whether we are compiled with exception support.
-#ifndef YY_EXCEPTIONS
-# if defined __GNUC__ && !defined __EXCEPTIONS
-# define YY_EXCEPTIONS 0
-# else
-# define YY_EXCEPTIONS 1
-# endif
-#endif
-
-
-
-// Enable debugging if requested.
-#if YYDEBUG
-
-// A pseudo ostream that takes yydebug_ into account.
-# define YYCDEBUG if (yydebug_) (*yycdebug_)
-
-# define YY_SYMBOL_PRINT(Title, Symbol) \
- do { \
- if (yydebug_) \
- { \
- *yycdebug_ << Title << ' '; \
- yy_print_ (*yycdebug_, Symbol); \
- *yycdebug_ << '\n'; \
- } \
- } while (false)
-
-# define YY_REDUCE_PRINT(Rule) \
- do { \
- if (yydebug_) \
- yy_reduce_print_ (Rule); \
- } while (false)
-
-# define YY_STACK_PRINT() \
- do { \
- if (yydebug_) \
- yy_stack_print_ (); \
- } while (false)
-
-#else // !YYDEBUG
-
-# define YYCDEBUG if (false) std::cerr
-# define YY_SYMBOL_PRINT(Title, Symbol) YY_USE (Symbol)
-# define YY_REDUCE_PRINT(Rule) static_cast<void> (0)
-# define YY_STACK_PRINT() static_cast<void> (0)
-
-#endif // !YYDEBUG
-
-#define yyerrok (yyerrstatus_ = 0)
-#define yyclearin (yyla.clear ())
-
-#define YYACCEPT goto yyacceptlab
-#define YYABORT goto yyabortlab
-#define YYERROR goto yyerrorlab
-#define YYRECOVERING() (!!yyerrstatus_)
-
-#line 50 "QLParser.yy"
-namespace QL {
-#line 135 "QLParser.tab.cc"
-
- /// Build a parser object.
- Parser::Parser (QL::Result &result_yyarg)
-#if YYDEBUG
- : yydebug_ (false),
- yycdebug_ (&std::cerr),
-#else
- :
-#endif
- result (result_yyarg)
- {}
-
- Parser::~Parser ()
- {}
-
- Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
- {}
-
- /*---------------.
- | symbol kinds. |
- `---------------*/
-
-
-
- // by_state.
- Parser::by_state::by_state () YY_NOEXCEPT
- : state (empty_state)
- {}
-
- Parser::by_state::by_state (const by_state& that) YY_NOEXCEPT
- : state (that.state)
- {}
-
- void
- Parser::by_state::clear () YY_NOEXCEPT
- {
- state = empty_state;
- }
-
- void
- Parser::by_state::move (by_state& that)
- {
- state = that.state;
- that.clear ();
- }
-
- Parser::by_state::by_state (state_type s) YY_NOEXCEPT
- : state (s)
- {}
-
- Parser::symbol_kind_type
- Parser::by_state::kind () const YY_NOEXCEPT
- {
- if (state == empty_state)
- return symbol_kind::S_YYEMPTY;
- else
- return YY_CAST (symbol_kind_type, yystos_[+state]);
- }
-
- Parser::stack_symbol_type::stack_symbol_type ()
- {}
-
- Parser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that)
- : super_type (YY_MOVE (that.state))
- {
- switch (that.kind ())
- {
- case symbol_kind::S_NUM: // "number"
- case symbol_kind::S_NAME: // "name"
- case symbol_kind::S_FNAME: // FNAME
- case symbol_kind::S_JGROUP: // JGROUP
- case symbol_kind::S_JPARENT: // JPARENT
- case symbol_kind::S_QSTR: // QSTR
- case symbol_kind::S_FILEIOVFD: // FILEIOVFD
- case symbol_kind::S_exp: // exp
- case symbol_kind::S_term: // term
- value.YY_MOVE_OR_COPY< Expression * > (YY_MOVE (that.value));
- break;
-
- default:
- break;
- }
-
-#if 201103L <= YY_CPLUSPLUS
- // that is emptied.
- that.state = empty_state;
-#endif
- }
-
- Parser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that)
- : super_type (s)
- {
- switch (that.kind ())
- {
- case symbol_kind::S_NUM: // "number"
- case symbol_kind::S_NAME: // "name"
- case symbol_kind::S_FNAME: // FNAME
- case symbol_kind::S_JGROUP: // JGROUP
- case symbol_kind::S_JPARENT: // JPARENT
- case symbol_kind::S_QSTR: // QSTR
- case symbol_kind::S_FILEIOVFD: // FILEIOVFD
- case symbol_kind::S_exp: // exp
- case symbol_kind::S_term: // term
- value.move< Expression * > (YY_MOVE (that.value));
- break;
-
- default:
- break;
- }
-
- // that is emptied.
- that.kind_ = symbol_kind::S_YYEMPTY;
- }
-
-#if YY_CPLUSPLUS < 201103L
- Parser::stack_symbol_type&
- Parser::stack_symbol_type::operator= (const stack_symbol_type& that)
- {
- state = that.state;
- switch (that.kind ())
- {
- case symbol_kind::S_NUM: // "number"
- case symbol_kind::S_NAME: // "name"
- case symbol_kind::S_FNAME: // FNAME
- case symbol_kind::S_JGROUP: // JGROUP
- case symbol_kind::S_JPARENT: // JPARENT
- case symbol_kind::S_QSTR: // QSTR
- case symbol_kind::S_FILEIOVFD: // FILEIOVFD
- case symbol_kind::S_exp: // exp
- case symbol_kind::S_term: // term
- value.copy< Expression * > (that.value);
- break;
-
- default:
- break;
- }
-
- return *this;
- }
-
- Parser::stack_symbol_type&
- Parser::stack_symbol_type::operator= (stack_symbol_type& that)
- {
- state = that.state;
- switch (that.kind ())
- {
- case symbol_kind::S_NUM: // "number"
- case symbol_kind::S_NAME: // "name"
- case symbol_kind::S_FNAME: // FNAME
- case symbol_kind::S_JGROUP: // JGROUP
- case symbol_kind::S_JPARENT: // JPARENT
- case symbol_kind::S_QSTR: // QSTR
- case symbol_kind::S_FILEIOVFD: // FILEIOVFD
- case symbol_kind::S_exp: // exp
- case symbol_kind::S_term: // term
- value.move< Expression * > (that.value);
- break;
-
- default:
- break;
- }
-
- // that is emptied.
- that.state = empty_state;
- return *this;
- }
-#endif
-
- template <typename Base>
- void
- Parser::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const
- {
- if (yymsg)
- YY_SYMBOL_PRINT (yymsg, yysym);
- }
-
-#if YYDEBUG
- template <typename Base>
- void
- Parser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const
- {
- std::ostream& yyoutput = yyo;
- YY_USE (yyoutput);
- if (yysym.empty ())
- yyo << "empty symbol";
- else
- {
- symbol_kind_type yykind = yysym.kind ();
- yyo << (yykind < YYNTOKENS ? "token" : "nterm")
- << ' ' << yysym.name () << " (";
- YY_USE (yykind);
- yyo << ')';
- }
- }
-#endif
-
- void
- Parser::yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym)
- {
- if (m)
- YY_SYMBOL_PRINT (m, sym);
- yystack_.push (YY_MOVE (sym));
- }
-
- void
- Parser::yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym)
- {
-#if 201103L <= YY_CPLUSPLUS
- yypush_ (m, stack_symbol_type (s, std::move (sym)));
-#else
- stack_symbol_type ss (s, sym);
- yypush_ (m, ss);
-#endif
- }
-
- void
- Parser::yypop_ (int n)
- {
- yystack_.pop (n);
- }
-
-#if YYDEBUG
- std::ostream&
- Parser::debug_stream () const
- {
- return *yycdebug_;
- }
-
- void
- Parser::set_debug_stream (std::ostream& o)
- {
- yycdebug_ = &o;
- }
-
-
- Parser::debug_level_type
- Parser::debug_level () const
- {
- return yydebug_;
- }
-
- void
- Parser::set_debug_level (debug_level_type l)
- {
- yydebug_ = l;
- }
-#endif // YYDEBUG
-
- Parser::state_type
- Parser::yy_lr_goto_state_ (state_type yystate, int yysym)
- {
- int yyr = yypgoto_[yysym - YYNTOKENS] + yystate;
- if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
- return yytable_[yyr];
- else
- return yydefgoto_[yysym - YYNTOKENS];
- }
-
- bool
- Parser::yy_pact_value_is_default_ (int yyvalue)
- {
- return yyvalue == yypact_ninf_;
- }
-
- bool
- Parser::yy_table_value_is_error_ (int yyvalue)
- {
- return yyvalue == yytable_ninf_;
- }
-
- int
- Parser::operator() ()
- {
- return parse ();
- }
-
- int
- Parser::parse ()
- {
- int yyn;
- /// Length of the RHS of the rule being reduced.
- int yylen = 0;
-
- // Error handling.
- int yynerrs_ = 0;
- int yyerrstatus_ = 0;
-
- /// The lookahead symbol.
- symbol_type yyla;
-
- /// The return value of parse ().
- int yyresult;
-
-#if YY_EXCEPTIONS
- try
-#endif // YY_EXCEPTIONS
- {
- YYCDEBUG << "Starting parse\n";
-
-
- /* Initialize the stack. The initial state will be set in
- yynewstate, since the latter expects the semantical and the
- location values to have been already stored, initialize these
- stacks with a primary value. */
- yystack_.clear ();
- yypush_ (YY_NULLPTR, 0, YY_MOVE (yyla));
-
- /*-----------------------------------------------.
- | yynewstate -- push a new symbol on the stack. |
- `-----------------------------------------------*/
- yynewstate:
- YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n';
- YY_STACK_PRINT ();
-
- // Accept?
- if (yystack_[0].state == yyfinal_)
- YYACCEPT;
-
- goto yybackup;
-
-
- /*-----------.
- | yybackup. |
- `-----------*/
- yybackup:
- // Try to take a decision without lookahead.
- yyn = yypact_[+yystack_[0].state];
- if (yy_pact_value_is_default_ (yyn))
- goto yydefault;
-
- // Read a lookahead token.
- if (yyla.empty ())
- {
- YYCDEBUG << "Reading a token\n";
-#if YY_EXCEPTIONS
- try
-#endif // YY_EXCEPTIONS
- {
- symbol_type yylookahead (yylex (result));
- yyla.move (yylookahead);
- }
-#if YY_EXCEPTIONS
- catch (const syntax_error& yyexc)
- {
- YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
- error (yyexc);
- goto yyerrlab1;
- }
-#endif // YY_EXCEPTIONS
- }
- YY_SYMBOL_PRINT ("Next token is", yyla);
-
- if (yyla.kind () == symbol_kind::S_YYerror)
- {
- // The scanner already issued an error message, process directly
- // to error recovery. But do not keep the error token as
- // lookahead, it is too special and may lead us to an endless
- // loop in error recovery. */
- yyla.kind_ = symbol_kind::S_YYUNDEF;
- goto yyerrlab1;
- }
-
- /* If the proper action on seeing token YYLA.TYPE is to reduce or
- to detect an error, take that action. */
- yyn += yyla.kind ();
- if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ())
- {
- goto yydefault;
- }
-
- // Reduce or error.
- yyn = yytable_[yyn];
- if (yyn <= 0)
- {
- if (yy_table_value_is_error_ (yyn))
- goto yyerrlab;
- yyn = -yyn;
- goto yyreduce;
- }
-
- // Count tokens shifted since error; after three, turn off error status.
- if (yyerrstatus_)
- --yyerrstatus_;
-
- // Shift the lookahead token.
- yypush_ ("Shifting", state_type (yyn), YY_MOVE (yyla));
- goto yynewstate;
-
-
- /*-----------------------------------------------------------.
- | yydefault -- do the default action for the current state. |
- `-----------------------------------------------------------*/
- yydefault:
- yyn = yydefact_[+yystack_[0].state];
- if (yyn == 0)
- goto yyerrlab;
- goto yyreduce;
-
-
- /*-----------------------------.
- | yyreduce -- do a reduction. |
- `-----------------------------*/
- yyreduce:
- yylen = yyr2_[yyn];
- {
- stack_symbol_type yylhs;
- yylhs.state = yy_lr_goto_state_ (yystack_[yylen].state, yyr1_[yyn]);
- /* Variants are always initialized to an empty instance of the
- correct type. The default '$$ = $1' action is NOT applied
- when using variants. */
- switch (yyr1_[yyn])
- {
- case symbol_kind::S_NUM: // "number"
- case symbol_kind::S_NAME: // "name"
- case symbol_kind::S_FNAME: // FNAME
- case symbol_kind::S_JGROUP: // JGROUP
- case symbol_kind::S_JPARENT: // JPARENT
- case symbol_kind::S_QSTR: // QSTR
- case symbol_kind::S_FILEIOVFD: // FILEIOVFD
- case symbol_kind::S_exp: // exp
- case symbol_kind::S_term: // term
- yylhs.value.emplace< Expression * > ();
- break;
-
- default:
- break;
- }
-
-
-
- // Perform the reduction.
- YY_REDUCE_PRINT (yyn);
-#if YY_EXCEPTIONS
- try
-#endif // YY_EXCEPTIONS
- {
- switch (yyn)
- {
- case 2: // S: %empty
-#line 104 "QLParser.yy"
- { result.out = new Expression (Expression::OP_NUM, (uint64_t) 1); }
-#line 577 "QLParser.tab.cc"
- break;
-
- case 3: // S: exp
-#line 105 "QLParser.yy"
- { result.out = new Expression (yystack_[0].value.as < Expression * > ()); }
-#line 583 "QLParser.tab.cc"
- break;
-
- case 4: // exp: exp DEG exp
-#line 107 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_DEG, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 589 "QLParser.tab.cc"
- break;
-
- case 5: // exp: exp MUL exp
-#line 108 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_MUL, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 595 "QLParser.tab.cc"
- break;
-
- case 6: // exp: exp DIV exp
-#line 109 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_DIV, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 601 "QLParser.tab.cc"
- break;
-
- case 7: // exp: exp REM exp
-#line 110 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_REM, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 607 "QLParser.tab.cc"
- break;
-
- case 8: // exp: exp ADD exp
-#line 111 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_ADD, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 613 "QLParser.tab.cc"
- break;
-
- case 9: // exp: exp MINUS exp
-#line 112 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_MINUS, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 619 "QLParser.tab.cc"
- break;
-
- case 10: // exp: exp LS exp
-#line 113 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_LS, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 625 "QLParser.tab.cc"
- break;
-
- case 11: // exp: exp RS exp
-#line 114 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_RS, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 631 "QLParser.tab.cc"
- break;
-
- case 12: // exp: exp LT exp
-#line 115 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_LT, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 637 "QLParser.tab.cc"
- break;
-
- case 13: // exp: exp LE exp
-#line 116 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_LE, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 643 "QLParser.tab.cc"
- break;
-
- case 14: // exp: exp GT exp
-#line 117 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_GT, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 649 "QLParser.tab.cc"
- break;
-
- case 15: // exp: exp GE exp
-#line 118 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_GE, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 655 "QLParser.tab.cc"
- break;
-
- case 16: // exp: exp EQ exp
-#line 119 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_EQ, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 661 "QLParser.tab.cc"
- break;
-
- case 17: // exp: exp NE exp
-#line 120 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_NE, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 667 "QLParser.tab.cc"
- break;
-
- case 18: // exp: exp BITAND exp
-#line 121 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_BITAND, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 673 "QLParser.tab.cc"
- break;
-
- case 19: // exp: exp BITXOR exp
-#line 122 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_BITXOR, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 679 "QLParser.tab.cc"
- break;
-
- case 20: // exp: exp BITOR exp
-#line 123 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_BITOR, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 685 "QLParser.tab.cc"
- break;
-
- case 21: // exp: exp AND exp
-#line 124 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_AND, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 691 "QLParser.tab.cc"
- break;
-
- case 22: // exp: exp OR exp
-#line 125 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_OR, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 697 "QLParser.tab.cc"
- break;
-
- case 23: // exp: exp NEQV exp
-#line 126 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_NEQV, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 703 "QLParser.tab.cc"
- break;
-
- case 24: // exp: exp EQV exp
-#line 127 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_EQV, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 709 "QLParser.tab.cc"
- break;
-
- case 25: // exp: exp QWE exp COLON exp
-#line 128 "QLParser.yy"
- { Expression colon = Expression (Expression::OP_COLON, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ());
- yylhs.value.as < Expression * > () = new Expression (Expression::OP_QWE, yystack_[4].value.as < Expression * > (), &colon); }
-#line 716 "QLParser.tab.cc"
- break;
-
- case 26: // exp: exp COMMA exp
-#line 130 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_COMMA, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 722 "QLParser.tab.cc"
- break;
-
- case 27: // exp: exp IN exp
-#line 131 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_IN, yystack_[2].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 728 "QLParser.tab.cc"
- break;
-
- case 28: // exp: exp SOME IN exp
-#line 132 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_SOMEIN, yystack_[3].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 734 "QLParser.tab.cc"
- break;
-
- case 29: // exp: exp ORDR IN exp
-#line 133 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_ORDRIN, yystack_[3].value.as < Expression * > (), yystack_[0].value.as < Expression * > ()); }
-#line 740 "QLParser.tab.cc"
- break;
-
- case 30: // exp: term
-#line 134 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (yystack_[0].value.as < Expression * > ()); }
-#line 746 "QLParser.tab.cc"
- break;
-
- case 31: // term: MINUS term
-#line 136 "QLParser.yy"
- { Expression num = Expression (Expression::OP_NUM, (uint64_t) 0);
- yylhs.value.as < Expression * > () = new Expression (Expression::OP_MINUS, &num, yystack_[0].value.as < Expression * > ()); }
-#line 753 "QLParser.tab.cc"
- break;
-
- case 32: // term: NOT term
-#line 138 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_NOT, yystack_[0].value.as < Expression * > (), NULL); }
-#line 759 "QLParser.tab.cc"
- break;
-
- case 33: // term: BITNOT term
-#line 139 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_BITNOT, yystack_[0].value.as < Expression * > (), NULL); }
-#line 765 "QLParser.tab.cc"
- break;
-
- case 34: // term: "(" exp ")"
-#line 140 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (yystack_[1].value.as < Expression * > ()); }
-#line 771 "QLParser.tab.cc"
- break;
-
- case 35: // term: FNAME "(" QSTR ")"
-#line 141 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_FUNC, yystack_[3].value.as < Expression * > (), yystack_[1].value.as < Expression * > ()); }
-#line 777 "QLParser.tab.cc"
- break;
-
- case 36: // term: HASPROP "(" "name" ")"
-#line 142 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_HASPROP, yystack_[1].value.as < Expression * > (), NULL); }
-#line 783 "QLParser.tab.cc"
- break;
-
- case 37: // term: JGROUP "(" QSTR ")"
-#line 143 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_JAVA, yystack_[3].value.as < Expression * > (), yystack_[1].value.as < Expression * > ()); }
-#line 789 "QLParser.tab.cc"
- break;
-
- case 38: // term: JPARENT "(" QSTR ")"
-#line 144 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_JAVA, yystack_[3].value.as < Expression * > (), yystack_[1].value.as < Expression * > ()); }
-#line 795 "QLParser.tab.cc"
- break;
-
- case 39: // term: FILEIOVFD "(" QSTR ")"
-#line 145 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (Expression::OP_FILE, yystack_[3].value.as < Expression * > (), yystack_[1].value.as < Expression * > ()); }
-#line 801 "QLParser.tab.cc"
- break;
-
- case 40: // term: "number"
-#line 146 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (yystack_[0].value.as < Expression * > ()); }
-#line 807 "QLParser.tab.cc"
- break;
-
- case 41: // term: "name"
-#line 147 "QLParser.yy"
- { yylhs.value.as < Expression * > () = new Expression (yystack_[0].value.as < Expression * > ()); }
-#line 813 "QLParser.tab.cc"
- break;
-
-
-#line 817 "QLParser.tab.cc"
-
- default:
- break;
- }
- }
-#if YY_EXCEPTIONS
- catch (const syntax_error& yyexc)
- {
- YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
- error (yyexc);
- YYERROR;
- }
-#endif // YY_EXCEPTIONS
- YY_SYMBOL_PRINT ("-> $$ =", yylhs);
- yypop_ (yylen);
- yylen = 0;
-
- // Shift the result of the reduction.
- yypush_ (YY_NULLPTR, YY_MOVE (yylhs));
- }
- goto yynewstate;
-
-
- /*--------------------------------------.
- | yyerrlab -- here on detecting error. |
- `--------------------------------------*/
- yyerrlab:
- // If not already recovering from an error, report this error.
- if (!yyerrstatus_)
- {
- ++yynerrs_;
- std::string msg = YY_("syntax error");
- error (YY_MOVE (msg));
- }
-
-
- if (yyerrstatus_ == 3)
- {
- /* If just tried and failed to reuse lookahead token after an
- error, discard it. */
-
- // Return failure if at end of input.
- if (yyla.kind () == symbol_kind::S_YYEOF)
- YYABORT;
- else if (!yyla.empty ())
- {
- yy_destroy_ ("Error: discarding", yyla);
- yyla.clear ();
- }
- }
-
- // Else will try to reuse lookahead token after shifting the error token.
- goto yyerrlab1;
-
-
- /*---------------------------------------------------.
- | yyerrorlab -- error raised explicitly by YYERROR. |
- `---------------------------------------------------*/
- yyerrorlab:
- /* Pacify compilers when the user code never invokes YYERROR and
- the label yyerrorlab therefore never appears in user code. */
- if (false)
- YYERROR;
-
- /* Do not reclaim the symbols of the rule whose action triggered
- this YYERROR. */
- yypop_ (yylen);
- yylen = 0;
- YY_STACK_PRINT ();
- goto yyerrlab1;
-
-
- /*-------------------------------------------------------------.
- | yyerrlab1 -- common code for both syntax error and YYERROR. |
- `-------------------------------------------------------------*/
- yyerrlab1:
- yyerrstatus_ = 3; // Each real token shifted decrements this.
- // Pop stack until we find a state that shifts the error token.
- for (;;)
- {
- yyn = yypact_[+yystack_[0].state];
- if (!yy_pact_value_is_default_ (yyn))
- {
- yyn += symbol_kind::S_YYerror;
- if (0 <= yyn && yyn <= yylast_
- && yycheck_[yyn] == symbol_kind::S_YYerror)
- {
- yyn = yytable_[yyn];
- if (0 < yyn)
- break;
- }
- }
-
- // Pop the current state because it cannot handle the error token.
- if (yystack_.size () == 1)
- YYABORT;
-
- yy_destroy_ ("Error: popping", yystack_[0]);
- yypop_ ();
- YY_STACK_PRINT ();
- }
- {
- stack_symbol_type error_token;
-
-
- // Shift the error token.
- error_token.state = state_type (yyn);
- yypush_ ("Shifting", YY_MOVE (error_token));
- }
- goto yynewstate;
-
-
- /*-------------------------------------.
- | yyacceptlab -- YYACCEPT comes here. |
- `-------------------------------------*/
- yyacceptlab:
- yyresult = 0;
- goto yyreturn;
-
-
- /*-----------------------------------.
- | yyabortlab -- YYABORT comes here. |
- `-----------------------------------*/
- yyabortlab:
- yyresult = 1;
- goto yyreturn;
-
-
- /*-----------------------------------------------------.
- | yyreturn -- parsing is finished, return the result. |
- `-----------------------------------------------------*/
- yyreturn:
- if (!yyla.empty ())
- yy_destroy_ ("Cleanup: discarding lookahead", yyla);
-
- /* Do not reclaim the symbols of the rule whose action triggered
- this YYABORT or YYACCEPT. */
- yypop_ (yylen);
- YY_STACK_PRINT ();
- while (1 < yystack_.size ())
- {
- yy_destroy_ ("Cleanup: popping", yystack_[0]);
- yypop_ ();
- }
-
- return yyresult;
- }
-#if YY_EXCEPTIONS
- catch (...)
- {
- YYCDEBUG << "Exception caught: cleaning lookahead and stack\n";
- // Do not try to display the values of the reclaimed symbols,
- // as their printers might throw an exception.
- if (!yyla.empty ())
- yy_destroy_ (YY_NULLPTR, yyla);
-
- while (1 < yystack_.size ())
- {
- yy_destroy_ (YY_NULLPTR, yystack_[0]);
- yypop_ ();
- }
- throw;
- }
-#endif // YY_EXCEPTIONS
- }
-
- void
- Parser::error (const syntax_error& yyexc)
- {
- error (yyexc.what ());
- }
-
-#if YYDEBUG || 0
- const char *
- Parser::symbol_name (symbol_kind_type yysymbol)
- {
- return yytname_[yysymbol];
- }
-#endif // #if YYDEBUG || 0
-
-
-
-
-
- const signed char Parser::yypact_ninf_ = -3;
-
- const signed char Parser::yytable_ninf_ = -1;
-
- const short
- Parser::yypact_[] =
- {
- 0, 0, -3, -3, -2, 1, 8, 13, 14, 0,
- 0, 0, 2, 142, -3, 50, 7, 15, 9, 11,
- 12, -3, -3, -3, -3, 0, 6, 38, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -3, 21, 22, 48, 49, 51, 188, 0, 0,
- 221, 96, 95, 95, 95, 95, 95, 95, 95, 141,
- 141, 141, 141, 141, 141, 17, 17, 17, 17, 17,
- 17, 17, 17, -3, -3, -3, -3, -3, 188, 188,
- 0, 221
- };
-
- const signed char
- Parser::yydefact_[] =
- {
- 2, 0, 40, 41, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 3, 30, 0, 0, 0, 0, 0,
- 0, 31, 32, 33, 1, 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, 34, 0, 0, 0, 0, 0, 27, 0, 0,
- 26, 0, 21, 22, 24, 23, 18, 20, 19, 16,
- 17, 12, 14, 13, 15, 10, 11, 8, 9, 5,
- 6, 7, 4, 35, 36, 37, 38, 39, 28, 29,
- 0, 25
- };
-
- const signed char
- Parser::yypgoto_[] =
- {
- -3, -3, -1, 4
- };
-
- const signed char
- Parser::yydefgoto_[] =
- {
- 0, 12, 13, 14
- };
-
- const signed char
- Parser::yytable_[] =
- {
- 15, 16, 24, 1, 17, 2, 3, 4, 5, 6,
- 7, 18, 8, 21, 22, 23, 19, 20, 52, 58,
- 54, 53, 55, 56, 57, 83, 84, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 9, 59, 85, 86, 51, 87, 0, 88, 89, 10,
- 0, 11, 0, 25, 26, 27, 28, 0, 29, 0,
- 0, 0, 30, 0, 31, 50, 32, 33, 34, 35,
- 36, 0, 37, 0, 38, 0, 39, 0, 40, 91,
- 41, 0, 42, 0, 43, 0, 44, 0, 45, 0,
- 46, 0, 47, 0, 48, 0, 49, 0, 50, 25,
- 26, 27, 28, 0, 29, 0, 90, 0, 30, 0,
- 31, 0, 32, 33, 34, 35, 36, 37, 37, 38,
- 38, 39, 39, 40, 40, 41, 41, 42, 42, 43,
- 43, 44, 44, 45, 45, 46, 46, 47, 47, 48,
- 48, 49, 49, 50, 50, 25, 26, 27, 28, 0,
- 29, 0, 0, 0, 30, 0, 31, 0, 32, 33,
- 34, 35, 36, -1, 37, -1, 38, -1, 39, -1,
- 40, -1, 41, -1, 42, 43, 43, 44, 44, 45,
- 45, 46, 46, 47, 47, 48, 48, 49, 49, 50,
- 50, -1, -1, -1, 28, 0, 29, 0, 0, 0,
- 30, 0, 31, 0, 32, 33, 34, 35, 36, 0,
- 37, 0, 38, 0, 39, 0, 40, 0, 41, 0,
- 42, 0, 43, 0, 44, 0, 45, 0, 46, 29,
- 47, 0, 48, 30, 49, 31, 50, 32, 33, 34,
- 35, 36, 0, 37, 0, 38, 0, 39, 0, 40,
- 0, 41, 0, 42, 0, 43, 0, 44, 0, 45,
- 0, 46, 0, 47, 0, 48, 0, 49, 0, 50
- };
-
- const signed char
- Parser::yycheck_[] =
- {
- 1, 3, 0, 3, 3, 5, 6, 7, 8, 9,
- 10, 3, 12, 9, 10, 11, 3, 3, 11, 13,
- 11, 6, 11, 11, 25, 4, 4, 28, 29, 30,
- 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 50, 13, 4, 4, 4, 4, -1, 58, 59, 59,
- -1, 61, -1, 13, 14, 15, 16, -1, 18, -1,
- -1, -1, 22, -1, 24, 58, 26, 27, 28, 29,
- 30, -1, 32, -1, 34, -1, 36, -1, 38, 90,
- 40, -1, 42, -1, 44, -1, 46, -1, 48, -1,
- 50, -1, 52, -1, 54, -1, 56, -1, 58, 13,
- 14, 15, 16, -1, 18, -1, 20, -1, 22, -1,
- 24, -1, 26, 27, 28, 29, 30, 32, 32, 34,
- 34, 36, 36, 38, 38, 40, 40, 42, 42, 44,
- 44, 46, 46, 48, 48, 50, 50, 52, 52, 54,
- 54, 56, 56, 58, 58, 13, 14, 15, 16, -1,
- 18, -1, -1, -1, 22, -1, 24, -1, 26, 27,
- 28, 29, 30, 32, 32, 34, 34, 36, 36, 38,
- 38, 40, 40, 42, 42, 44, 44, 46, 46, 48,
- 48, 50, 50, 52, 52, 54, 54, 56, 56, 58,
- 58, 13, 14, 15, 16, -1, 18, -1, -1, -1,
- 22, -1, 24, -1, 26, 27, 28, 29, 30, -1,
- 32, -1, 34, -1, 36, -1, 38, -1, 40, -1,
- 42, -1, 44, -1, 46, -1, 48, -1, 50, 18,
- 52, -1, 54, 22, 56, 24, 58, 26, 27, 28,
- 29, 30, -1, 32, -1, 34, -1, 36, -1, 38,
- -1, 40, -1, 42, -1, 44, -1, 46, -1, 48,
- -1, 50, -1, 52, -1, 54, -1, 56, -1, 58
- };
-
- const signed char
- Parser::yystos_[] =
- {
- 0, 3, 5, 6, 7, 8, 9, 10, 12, 50,
- 59, 61, 64, 65, 66, 65, 3, 3, 3, 3,
- 3, 66, 66, 66, 0, 13, 14, 15, 16, 18,
- 22, 24, 26, 27, 28, 29, 30, 32, 34, 36,
- 38, 40, 42, 44, 46, 48, 50, 52, 54, 56,
- 58, 4, 11, 6, 11, 11, 11, 65, 13, 13,
- 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
- 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
- 65, 65, 65, 4, 4, 4, 4, 4, 65, 65,
- 20, 65
- };
-
- const signed char
- Parser::yyr1_[] =
- {
- 0, 63, 64, 64, 65, 65, 65, 65, 65, 65,
- 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
- 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
- 65, 66, 66, 66, 66, 66, 66, 66, 66, 66,
- 66, 66
- };
-
- const signed char
- Parser::yyr2_[] =
- {
- 0, 2, 0, 1, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 5, 3, 3, 4, 4,
- 1, 2, 2, 2, 3, 4, 4, 4, 4, 4,
- 1, 1
- };
-
-
-#if YYDEBUG
- // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
- // First, the terminals, then, starting at \a YYNTOKENS, nonterminals.
- const char*
- const Parser::yytname_[] =
- {
- "\"end of file\"", "error", "\"invalid token\"", "\"(\"", "\")\"",
- "\"number\"", "\"name\"", "FNAME", "HASPROP", "JGROUP", "JPARENT",
- "QSTR", "FILEIOVFD", "IN", "SOME", "ORDR", "COMMA", "\",\"", "QWE",
- "\"?\"", "COLON", "\":\"", "AND", "\"&&\"", "OR", "\"|\"", "EQV", "NEQV",
- "BITAND", "BITOR", "BITXOR", "\"^\"", "EQ", "\"=\"", "NE", "\"!=\"",
- "LT", "\"<\"", "GT", "\">\"", "LE", "\"<=\"", "GE", "\">=\"", "LS",
- "\"<<\"", "RS", "\">>\"", "ADD", "\"+\"", "MINUS", "\"-\"", "MUL",
- "\"*\"", "DIV", "\"/\"", "REM", "\"%\"", "DEG", "NOT", "\"!\"", "BITNOT",
- "\"~\"", "$accept", "S", "exp", "term", YY_NULLPTR
- };
-#endif
-
-
-#if YYDEBUG
- const unsigned char
- Parser::yyrline_[] =
- {
- 0, 104, 104, 105, 107, 108, 109, 110, 111, 112,
- 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
- 123, 124, 125, 126, 127, 128, 130, 131, 132, 133,
- 134, 136, 138, 139, 140, 141, 142, 143, 144, 145,
- 146, 147
- };
-
- void
- Parser::yy_stack_print_ () const
- {
- *yycdebug_ << "Stack now";
- for (stack_type::const_iterator
- i = yystack_.begin (),
- i_end = yystack_.end ();
- i != i_end; ++i)
- *yycdebug_ << ' ' << int (i->state);
- *yycdebug_ << '\n';
- }
-
- void
- Parser::yy_reduce_print_ (int yyrule) const
- {
- int yylno = yyrline_[yyrule];
- int yynrhs = yyr2_[yyrule];
- // Print the symbols being reduced, and their result.
- *yycdebug_ << "Reducing stack by rule " << yyrule - 1
- << " (line " << yylno << "):\n";
- // The symbols being reduced.
- for (int yyi = 0; yyi < yynrhs; yyi++)
- YY_SYMBOL_PRINT (" $" << yyi + 1 << " =",
- yystack_[(yynrhs) - (yyi + 1)]);
- }
-#endif // YYDEBUG
-
-
-#line 50 "QLParser.yy"
-} // QL
-#line 1210 "QLParser.tab.cc"
-
-#line 149 "QLParser.yy"
-
-
-namespace QL
-{
- static Parser::symbol_type
- unget_ret (std::istream &in, char c, Parser::symbol_type tok)
- {
- in.putback (c);
- return tok;
- }
-
- static Expression *
- processName (char *name)
- {
- int propID = dbeSession->getPropIdByName (name);
- if (propID != PROP_NONE)
- {
- Expression *expr = new Expression (Expression::OP_NUM, (uint64_t) propID);
- Expression *ret = new Expression (Expression::OP_NAME, expr);
- delete expr;
- return ret;
- }
-
- // If a name is not statically known try user defined objects
- Expression *expr = dbeSession->findObjDefByName (name);
- if (expr != NULL)
- return expr->copy();
-
- throw Parser::syntax_error ("Name not found");
- }
-
- static Parser::symbol_type
- yylex (QL::Result &result)
- {
- int base = 0;
- int c;
-
- do
- c = result.in.get ();
- while (result.in && (c == ' ' || c == '\t'));
- if (!result.in)
- return Parser::make_YYEOF ();
-
- switch (c)
- {
- case '\n': return Parser::make_YYEOF ();
- case '(': return Parser::make_LPAR () ;
- case ')': return Parser::make_RPAR ();
- case ',': return Parser::make_COMMA ();
- case '%': return Parser::make_REM ();
- case '/': return Parser::make_DIV ();
- case '*': return Parser::make_MUL ();
- case '-': return Parser::make_MINUS ();
- case '+': return Parser::make_ADD ();
- case '~': return Parser::make_BITNOT ();
- case '^': return Parser::make_BITXOR ();
- case '?': return Parser::make_QWE ();
- case ':': return Parser::make_COLON ();
- case '|':
- c = result.in.get ();
- if (c == '|')
- return Parser::make_OR ();
- else
- return unget_ret (result.in, c, Parser::make_BITOR ());
- case '&':
- c = result.in.get ();
- if (c == '&')
- return Parser::make_AND ();
- else
- return unget_ret (result.in, c, Parser::make_BITAND ());
- case '!':
- c = result.in.get ();
- if (c == '=')
- return Parser::make_NE ();
- else
- return unget_ret (result.in, c, Parser::make_NOT ());
- case '=':
- c = result.in.get ();
- if (c == '=')
- return Parser::make_EQ ();
- else
- throw Parser::syntax_error ("Syntax error after =");
- case '<':
- c = result.in.get ();
- if (c == '=')
- return Parser::make_LE ();
- else if (c == '<')
- return Parser::make_LS ();
- else
- return unget_ret (result.in, c, Parser::make_LT ());
- case '>':
- c = result.in.get ();
- if (c == '=')
- return Parser::make_GE ();
- else if (c == '>')
- return Parser::make_RS ();
- else
- return unget_ret (result.in, c, Parser::make_GT ());
- case '"':
- {
- int maxsz = 16;
- char *str = (char *) malloc (maxsz);
- char *ptr = str;
-
- for (;;)
- {
- c = result.in.get ();
- if (!result.in)
- {
- free (str);
- throw Parser::syntax_error ("Unclosed \"");
- }
-
- switch (c)
- {
- case '"':
- *ptr = (char)0;
- // XXX omazur: need new string type
- return Parser::make_QSTR (new Expression (Expression::OP_NUM, (uint64_t) str));
- case 0:
- case '\n':
- free (str);
- throw Parser::syntax_error ("Multiline strings are not supported");
- default:
- if (ptr - str >= maxsz)
- {
- size_t len = ptr - str;
- maxsz = maxsz > 8192 ? maxsz + 8192 : maxsz * 2;
- char *new_s = (char *) realloc (str, maxsz);
- str = new_s;
- ptr = str + len;
- }
- *ptr++ = c;
- }
- }
- }
- default:
- if (c == '0')
- {
- base = 8;
- c = result.in.get ();
- if ( c == 'x' )
- {
- base = 16;
- c = result.in.get ();
- }
- }
- else if (c >= '1' && c <='9')
- base = 10;
-
- if (base)
- {
- uint64_t lval = 0;
- for (;;)
- {
- int digit = -1;
- switch (c)
- {
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- digit = c - '0';
- break;
- case '8': case '9':
- if (base > 8)
- digit = c - '0';
- break;
- case 'a': case 'b': case 'c':
- case 'd': case 'e': case 'f':
- if (base == 16)
- digit = c - 'a' + 10;
- break;
- case 'A': case 'B': case 'C':
- case 'D': case 'E': case 'F':
- if (base == 16)
- digit = c - 'A' + 10;
- break;
- }
- if (digit == -1)
- {
- result.in.putback (c);
- break;
- }
- lval = lval * base + digit;
- c = result.in.get ();
- }
- return Parser::make_NUM (new Expression (Expression::OP_NUM, lval));
- }
-
- if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))
- {
- char name[32]; // omazur XXX: accept any length
- name[0] = (char)c;
- for (size_t i = 1; i < sizeof (name); i++)
- {
- c = result.in.get ();
- if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ||
- (c >= '0' && c <= '9') || (c == '_'))
- name[i] = c;
- else
- {
- name[i] = (char)0;
- result.in.putback (c);
- break;
- }
- }
-
- if (strcasecmp (name, NTXT ("IN")) == 0)
- return Parser::make_IN ();
- else if (strcasecmp (name, NTXT ("SOME")) == 0)
- return Parser::make_SOME ();
- else if (strcasecmp (name, NTXT ("ORDERED")) == 0)
- return Parser::make_ORDR ();
- else if (strcasecmp (name, NTXT ("TRUE")) == 0)
- return Parser::make_NUM (new Expression (Expression::OP_NUM, (uint64_t) 1));
- else if (strcasecmp (name, NTXT ("FALSE")) == 0)
- return Parser::make_NUM (new Expression (Expression::OP_NUM, (uint64_t) 0));
- else if (strcasecmp (name, NTXT ("FNAME")) == 0)
- return Parser::make_FNAME (new Expression (Expression::OP_NUM, Expression::FUNC_FNAME));
- else if (strcasecmp (name, NTXT ("HAS_PROP")) == 0)
- return Parser::make_HASPROP ();
- else if (strcasecmp (name, NTXT ("JGROUP")) == 0)
- return Parser::make_JGROUP (new Expression (Expression::OP_NUM, Expression::JAVA_JGROUP));
- else if (strcasecmp (name, NTXT ("JPARENT")) == 0 )
- return Parser::make_JPARENT (new Expression (Expression::OP_NUM, Expression::JAVA_JPARENT));
- else if (strcasecmp (name, NTXT ("DNAME")) == 0)
- return Parser::make_FNAME (new Expression (Expression::OP_NUM, Expression::FUNC_DNAME));
- else if (strcasecmp (name, NTXT ("FILEIOVFD")) == 0 )
- return Parser::make_FILEIOVFD (new Expression (Expression::OP_NUM, (uint64_t) 0));
-
- return Parser::make_NAME (processName (name));
- }
-
- throw Parser::syntax_error ("Syntax error");
- }
- }
- void
- Parser::error (const std::string &)
- {
- // do nothing for now
- }
-}
-
+++ /dev/null
-// A Bison parser, made by GNU Bison 3.7.5.
-
-// Skeleton interface for Bison LALR(1) parsers in C++
-
-// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc.
-
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-// As a special exception, you may create a larger work that contains
-// part or all of the Bison parser skeleton and distribute that work
-// under terms of your choice, so long as that work isn't itself a
-// parser generator using the skeleton or a modified version thereof
-// as a parser skeleton. Alternatively, if you modify or redistribute
-// the parser skeleton itself, you may (at your option) remove this
-// special exception, which will cause the skeleton and the resulting
-// Bison output files to be licensed under the GNU General Public
-// License without this special exception.
-
-// This special exception was added by the Free Software Foundation in
-// version 2.2 of Bison.
-
-
-/**
- ** \file QLParser.tab.hh
- ** Define the QL::parser class.
- */
-
-// C++ LALR(1) parser skeleton written by Akim Demaille.
-
-// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
-// especially those whose name start with YY_ or yy_. They are
-// private implementation details that can be changed or removed.
-
-#ifndef YY_YY_QLPARSER_TAB_HH_INCLUDED
-# define YY_YY_QLPARSER_TAB_HH_INCLUDED
-// "%code requires" blocks.
-#line 33 "QLParser.yy"
-
-#include "QLParser.h"
-#include "DbeSession.h"
-#include "Expression.h"
-#include "Table.h"
-#include "i18n.h"
-
-#line 57 "QLParser.tab.hh"
-
-# include <cassert>
-# include <cstdlib> // std::abort
-# include <iostream>
-# include <stdexcept>
-# include <string>
-# include <vector>
-
-#if defined __cplusplus
-# define YY_CPLUSPLUS __cplusplus
-#else
-# define YY_CPLUSPLUS 199711L
-#endif
-
-// Support move semantics when possible.
-#if 201103L <= YY_CPLUSPLUS
-# define YY_MOVE std::move
-# define YY_MOVE_OR_COPY move
-# define YY_MOVE_REF(Type) Type&&
-# define YY_RVREF(Type) Type&&
-# define YY_COPY(Type) Type
-#else
-# define YY_MOVE
-# define YY_MOVE_OR_COPY copy
-# define YY_MOVE_REF(Type) Type&
-# define YY_RVREF(Type) const Type&
-# define YY_COPY(Type) const Type&
-#endif
-
-// Support noexcept when possible.
-#if 201103L <= YY_CPLUSPLUS
-# define YY_NOEXCEPT noexcept
-# define YY_NOTHROW
-#else
-# define YY_NOEXCEPT
-# define YY_NOTHROW throw ()
-#endif
-
-// Support constexpr when possible.
-#if 201703 <= YY_CPLUSPLUS
-# define YY_CONSTEXPR constexpr
-#else
-# define YY_CONSTEXPR
-#endif
-
-#include <typeinfo>
-#ifndef YY_ASSERT
-# include <cassert>
-# define YY_ASSERT assert
-#endif
-
-
-#ifndef YY_ATTRIBUTE_PURE
-# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
-# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
-# else
-# define YY_ATTRIBUTE_PURE
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE_UNUSED
-# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
-# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
-# else
-# define YY_ATTRIBUTE_UNUSED
-# endif
-#endif
-
-/* Suppress unused-variable warnings by "using" E. */
-#if ! defined lint || defined __GNUC__
-# define YY_USE(E) ((void) (E))
-#else
-# define YY_USE(E) /* empty */
-#endif
-
-#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
-/* Suppress an incorrect diagnostic about yylval being uninitialized. */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
- _Pragma ("GCC diagnostic push") \
- _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
- _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
- _Pragma ("GCC diagnostic pop")
-#else
-# define YY_INITIAL_VALUE(Value) Value
-#endif
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
-#endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
-#endif
-
-#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
-# define YY_IGNORE_USELESS_CAST_BEGIN \
- _Pragma ("GCC diagnostic push") \
- _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
-# define YY_IGNORE_USELESS_CAST_END \
- _Pragma ("GCC diagnostic pop")
-#endif
-#ifndef YY_IGNORE_USELESS_CAST_BEGIN
-# define YY_IGNORE_USELESS_CAST_BEGIN
-# define YY_IGNORE_USELESS_CAST_END
-#endif
-
-# ifndef YY_CAST
-# ifdef __cplusplus
-# define YY_CAST(Type, Val) static_cast<Type> (Val)
-# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
-# else
-# define YY_CAST(Type, Val) ((Type) (Val))
-# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
-# endif
-# endif
-# ifndef YY_NULLPTR
-# if defined __cplusplus
-# if 201103L <= __cplusplus
-# define YY_NULLPTR nullptr
-# else
-# define YY_NULLPTR 0
-# endif
-# else
-# define YY_NULLPTR ((void*)0)
-# endif
-# endif
-
-/* Debug traces. */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-#line 50 "QLParser.yy"
-namespace QL {
-#line 192 "QLParser.tab.hh"
-
-
-
-
- /// A Bison parser.
- class Parser
- {
- public:
-#ifndef YYSTYPE
- /// A buffer to store and retrieve objects.
- ///
- /// Sort of a variant, but does not keep track of the nature
- /// of the stored data, since that knowledge is available
- /// via the current parser state.
- class semantic_type
- {
- public:
- /// Type of *this.
- typedef semantic_type self_type;
-
- /// Empty construction.
- semantic_type () YY_NOEXCEPT
- : yybuffer_ ()
- , yytypeid_ (YY_NULLPTR)
- {}
-
- /// Construct and fill.
- template <typename T>
- semantic_type (YY_RVREF (T) t)
- : yytypeid_ (&typeid (T))
- {
- YY_ASSERT (sizeof (T) <= size);
- new (yyas_<T> ()) T (YY_MOVE (t));
- }
-
-#if 201103L <= YY_CPLUSPLUS
- /// Non copyable.
- semantic_type (const self_type&) = delete;
- /// Non copyable.
- self_type& operator= (const self_type&) = delete;
-#endif
-
- /// Destruction, allowed only if empty.
- ~semantic_type () YY_NOEXCEPT
- {
- YY_ASSERT (!yytypeid_);
- }
-
-# if 201103L <= YY_CPLUSPLUS
- /// Instantiate a \a T in here from \a t.
- template <typename T, typename... U>
- T&
- emplace (U&&... u)
- {
- YY_ASSERT (!yytypeid_);
- YY_ASSERT (sizeof (T) <= size);
- yytypeid_ = & typeid (T);
- return *new (yyas_<T> ()) T (std::forward <U>(u)...);
- }
-# else
- /// Instantiate an empty \a T in here.
- template <typename T>
- T&
- emplace ()
- {
- YY_ASSERT (!yytypeid_);
- YY_ASSERT (sizeof (T) <= size);
- yytypeid_ = & typeid (T);
- return *new (yyas_<T> ()) T ();
- }
-
- /// Instantiate a \a T in here from \a t.
- template <typename T>
- T&
- emplace (const T& t)
- {
- YY_ASSERT (!yytypeid_);
- YY_ASSERT (sizeof (T) <= size);
- yytypeid_ = & typeid (T);
- return *new (yyas_<T> ()) T (t);
- }
-# endif
-
- /// Instantiate an empty \a T in here.
- /// Obsolete, use emplace.
- template <typename T>
- T&
- build ()
- {
- return emplace<T> ();
- }
-
- /// Instantiate a \a T in here from \a t.
- /// Obsolete, use emplace.
- template <typename T>
- T&
- build (const T& t)
- {
- return emplace<T> (t);
- }
-
- /// Accessor to a built \a T.
- template <typename T>
- T&
- as () YY_NOEXCEPT
- {
- YY_ASSERT (yytypeid_);
- YY_ASSERT (*yytypeid_ == typeid (T));
- YY_ASSERT (sizeof (T) <= size);
- return *yyas_<T> ();
- }
-
- /// Const accessor to a built \a T (for %printer).
- template <typename T>
- const T&
- as () const YY_NOEXCEPT
- {
- YY_ASSERT (yytypeid_);
- YY_ASSERT (*yytypeid_ == typeid (T));
- YY_ASSERT (sizeof (T) <= size);
- return *yyas_<T> ();
- }
-
- /// Swap the content with \a that, of same type.
- ///
- /// Both variants must be built beforehand, because swapping the actual
- /// data requires reading it (with as()), and this is not possible on
- /// unconstructed variants: it would require some dynamic testing, which
- /// should not be the variant's responsibility.
- /// Swapping between built and (possibly) non-built is done with
- /// self_type::move ().
- template <typename T>
- void
- swap (self_type& that) YY_NOEXCEPT
- {
- YY_ASSERT (yytypeid_);
- YY_ASSERT (*yytypeid_ == *that.yytypeid_);
- std::swap (as<T> (), that.as<T> ());
- }
-
- /// Move the content of \a that to this.
- ///
- /// Destroys \a that.
- template <typename T>
- void
- move (self_type& that)
- {
-# if 201103L <= YY_CPLUSPLUS
- emplace<T> (std::move (that.as<T> ()));
-# else
- emplace<T> ();
- swap<T> (that);
-# endif
- that.destroy<T> ();
- }
-
-# if 201103L <= YY_CPLUSPLUS
- /// Move the content of \a that to this.
- template <typename T>
- void
- move (self_type&& that)
- {
- emplace<T> (std::move (that.as<T> ()));
- that.destroy<T> ();
- }
-#endif
-
- /// Copy the content of \a that to this.
- template <typename T>
- void
- copy (const self_type& that)
- {
- emplace<T> (that.as<T> ());
- }
-
- /// Destroy the stored \a T.
- template <typename T>
- void
- destroy ()
- {
- as<T> ().~T ();
- yytypeid_ = YY_NULLPTR;
- }
-
- private:
-#if YY_CPLUSPLUS < 201103L
- /// Non copyable.
- semantic_type (const self_type&);
- /// Non copyable.
- self_type& operator= (const self_type&);
-#endif
-
- /// Accessor to raw memory as \a T.
- template <typename T>
- T*
- yyas_ () YY_NOEXCEPT
- {
- void *yyp = yybuffer_.yyraw;
- return static_cast<T*> (yyp);
- }
-
- /// Const accessor to raw memory as \a T.
- template <typename T>
- const T*
- yyas_ () const YY_NOEXCEPT
- {
- const void *yyp = yybuffer_.yyraw;
- return static_cast<const T*> (yyp);
- }
-
- /// An auxiliary type to compute the largest semantic type.
- union union_type
- {
- // "number"
- // "name"
- // FNAME
- // JGROUP
- // JPARENT
- // QSTR
- // FILEIOVFD
- // exp
- // term
- char dummy1[sizeof (Expression *)];
- };
-
- /// The size of the largest semantic type.
- enum { size = sizeof (union_type) };
-
- /// A buffer to store semantic values.
- union
- {
- /// Strongest alignment constraints.
- long double yyalign_me;
- /// A buffer large enough to store any of the semantic values.
- char yyraw[size];
- } yybuffer_;
-
- /// Whether the content is built: if defined, the name of the stored type.
- const std::type_info *yytypeid_;
- };
-
-#else
- typedef YYSTYPE semantic_type;
-#endif
-
- /// Syntax errors thrown from user actions.
- struct syntax_error : std::runtime_error
- {
- syntax_error (const std::string& m)
- : std::runtime_error (m)
- {}
-
- syntax_error (const syntax_error& s)
- : std::runtime_error (s.what ())
- {}
-
- ~syntax_error () YY_NOEXCEPT YY_NOTHROW;
- };
-
- /// Token kinds.
- struct token
- {
- enum token_kind_type
- {
- L_YYEMPTY = -2,
- L_YYEOF = 0, // "end of file"
- L_YYerror = 256, // error
- L_YYUNDEF = 257, // "invalid token"
- L_LPAR = 258, // "("
- L_RPAR = 259, // ")"
- L_NUM = 260, // "number"
- L_NAME = 261, // "name"
- L_FNAME = 262, // FNAME
- L_HASPROP = 263, // HASPROP
- L_JGROUP = 264, // JGROUP
- L_JPARENT = 265, // JPARENT
- L_QSTR = 266, // QSTR
- L_FILEIOVFD = 267, // FILEIOVFD
- L_IN = 268, // IN
- L_SOME = 269, // SOME
- L_ORDR = 270, // ORDR
- L_COMMA = 271, // COMMA
- L_QWE = 273, // QWE
- L_COLON = 275, // COLON
- L_AND = 277, // AND
- L_OR = 279, // OR
- L_EQV = 281, // EQV
- L_NEQV = 282, // NEQV
- L_BITAND = 283, // BITAND
- L_BITOR = 284, // BITOR
- L_BITXOR = 285, // BITXOR
- L_EQ = 287, // EQ
- L_NE = 289, // NE
- L_LT = 291, // LT
- L_GT = 293, // GT
- L_LE = 295, // LE
- L_GE = 297, // GE
- L_LS = 299, // LS
- L_RS = 301, // RS
- L_ADD = 303, // ADD
- L_MINUS = 305, // MINUS
- L_MUL = 307, // MUL
- L_DIV = 309, // DIV
- L_REM = 311, // REM
- L_DEG = 313, // DEG
- L_NOT = 314, // NOT
- L_BITNOT = 316 // BITNOT
- };
- /// Backward compatibility alias (Bison 3.6).
- typedef token_kind_type yytokentype;
- };
-
- /// Token kind, as returned by yylex.
- typedef token::yytokentype token_kind_type;
-
- /// Backward compatibility alias (Bison 3.6).
- typedef token_kind_type token_type;
-
- /// Symbol kinds.
- struct symbol_kind
- {
- enum symbol_kind_type
- {
- YYNTOKENS = 63, ///< Number of tokens.
- S_YYEMPTY = -2,
- S_YYEOF = 0, // "end of file"
- S_YYerror = 1, // error
- S_YYUNDEF = 2, // "invalid token"
- S_LPAR = 3, // "("
- S_RPAR = 4, // ")"
- S_NUM = 5, // "number"
- S_NAME = 6, // "name"
- S_FNAME = 7, // FNAME
- S_HASPROP = 8, // HASPROP
- S_JGROUP = 9, // JGROUP
- S_JPARENT = 10, // JPARENT
- S_QSTR = 11, // QSTR
- S_FILEIOVFD = 12, // FILEIOVFD
- S_IN = 13, // IN
- S_SOME = 14, // SOME
- S_ORDR = 15, // ORDR
- S_COMMA = 16, // COMMA
- S_17_ = 17, // ","
- S_QWE = 18, // QWE
- S_19_ = 19, // "?"
- S_COLON = 20, // COLON
- S_21_ = 21, // ":"
- S_AND = 22, // AND
- S_23_ = 23, // "&&"
- S_OR = 24, // OR
- S_25_ = 25, // "|"
- S_EQV = 26, // EQV
- S_NEQV = 27, // NEQV
- S_BITAND = 28, // BITAND
- S_BITOR = 29, // BITOR
- S_BITXOR = 30, // BITXOR
- S_31_ = 31, // "^"
- S_EQ = 32, // EQ
- S_33_ = 33, // "="
- S_NE = 34, // NE
- S_35_ = 35, // "!="
- S_LT = 36, // LT
- S_37_ = 37, // "<"
- S_GT = 38, // GT
- S_39_ = 39, // ">"
- S_LE = 40, // LE
- S_41_ = 41, // "<="
- S_GE = 42, // GE
- S_43_ = 43, // ">="
- S_LS = 44, // LS
- S_45_ = 45, // "<<"
- S_RS = 46, // RS
- S_47_ = 47, // ">>"
- S_ADD = 48, // ADD
- S_49_ = 49, // "+"
- S_MINUS = 50, // MINUS
- S_51_ = 51, // "-"
- S_MUL = 52, // MUL
- S_53_ = 53, // "*"
- S_DIV = 54, // DIV
- S_55_ = 55, // "/"
- S_REM = 56, // REM
- S_57_ = 57, // "%"
- S_DEG = 58, // DEG
- S_NOT = 59, // NOT
- S_60_ = 60, // "!"
- S_BITNOT = 61, // BITNOT
- S_62_ = 62, // "~"
- S_YYACCEPT = 63, // $accept
- S_S = 64, // S
- S_exp = 65, // exp
- S_term = 66 // term
- };
- };
-
- /// (Internal) symbol kind.
- typedef symbol_kind::symbol_kind_type symbol_kind_type;
-
- /// The number of tokens.
- static const symbol_kind_type YYNTOKENS = symbol_kind::YYNTOKENS;
-
- /// A complete symbol.
- ///
- /// Expects its Base type to provide access to the symbol kind
- /// via kind ().
- ///
- /// Provide access to semantic value.
- template <typename Base>
- struct basic_symbol : Base
- {
- /// Alias to Base.
- typedef Base super_type;
-
- /// Default constructor.
- basic_symbol ()
- : value ()
- {}
-
-#if 201103L <= YY_CPLUSPLUS
- /// Move constructor.
- basic_symbol (basic_symbol&& that)
- : Base (std::move (that))
- , value ()
- {
- switch (this->kind ())
- {
- case symbol_kind::S_NUM: // "number"
- case symbol_kind::S_NAME: // "name"
- case symbol_kind::S_FNAME: // FNAME
- case symbol_kind::S_JGROUP: // JGROUP
- case symbol_kind::S_JPARENT: // JPARENT
- case symbol_kind::S_QSTR: // QSTR
- case symbol_kind::S_FILEIOVFD: // FILEIOVFD
- case symbol_kind::S_exp: // exp
- case symbol_kind::S_term: // term
- value.move< Expression * > (std::move (that.value));
- break;
-
- default:
- break;
- }
-
- }
-#endif
-
- /// Copy constructor.
- basic_symbol (const basic_symbol& that);
-
- /// Constructors for typed symbols.
-#if 201103L <= YY_CPLUSPLUS
- basic_symbol (typename Base::kind_type t)
- : Base (t)
- {}
-#else
- basic_symbol (typename Base::kind_type t)
- : Base (t)
- {}
-#endif
-
-#if 201103L <= YY_CPLUSPLUS
- basic_symbol (typename Base::kind_type t, Expression *&& v)
- : Base (t)
- , value (std::move (v))
- {}
-#else
- basic_symbol (typename Base::kind_type t, const Expression *& v)
- : Base (t)
- , value (v)
- {}
-#endif
-
- /// Destroy the symbol.
- ~basic_symbol ()
- {
- clear ();
- }
-
- /// Destroy contents, and record that is empty.
- void clear () YY_NOEXCEPT
- {
- // User destructor.
- symbol_kind_type yykind = this->kind ();
- basic_symbol<Base>& yysym = *this;
- (void) yysym;
- switch (yykind)
- {
- case symbol_kind::S_NUM: // "number"
-#line 100 "QLParser.yy"
- { delete yysym.value.template as < Expression * > (); }
-#line 682 "QLParser.tab.hh"
- break;
-
- case symbol_kind::S_NAME: // "name"
-#line 100 "QLParser.yy"
- { delete yysym.value.template as < Expression * > (); }
-#line 688 "QLParser.tab.hh"
- break;
-
- case symbol_kind::S_FNAME: // FNAME
-#line 100 "QLParser.yy"
- { delete yysym.value.template as < Expression * > (); }
-#line 694 "QLParser.tab.hh"
- break;
-
- case symbol_kind::S_JGROUP: // JGROUP
-#line 100 "QLParser.yy"
- { delete yysym.value.template as < Expression * > (); }
-#line 700 "QLParser.tab.hh"
- break;
-
- case symbol_kind::S_JPARENT: // JPARENT
-#line 100 "QLParser.yy"
- { delete yysym.value.template as < Expression * > (); }
-#line 706 "QLParser.tab.hh"
- break;
-
- case symbol_kind::S_QSTR: // QSTR
-#line 100 "QLParser.yy"
- { delete yysym.value.template as < Expression * > (); }
-#line 712 "QLParser.tab.hh"
- break;
-
- case symbol_kind::S_FILEIOVFD: // FILEIOVFD
-#line 100 "QLParser.yy"
- { delete yysym.value.template as < Expression * > (); }
-#line 718 "QLParser.tab.hh"
- break;
-
- case symbol_kind::S_exp: // exp
-#line 100 "QLParser.yy"
- { delete yysym.value.template as < Expression * > (); }
-#line 724 "QLParser.tab.hh"
- break;
-
- case symbol_kind::S_term: // term
-#line 100 "QLParser.yy"
- { delete yysym.value.template as < Expression * > (); }
-#line 730 "QLParser.tab.hh"
- break;
-
- default:
- break;
- }
-
- // Value type destructor.
-switch (yykind)
- {
- case symbol_kind::S_NUM: // "number"
- case symbol_kind::S_NAME: // "name"
- case symbol_kind::S_FNAME: // FNAME
- case symbol_kind::S_JGROUP: // JGROUP
- case symbol_kind::S_JPARENT: // JPARENT
- case symbol_kind::S_QSTR: // QSTR
- case symbol_kind::S_FILEIOVFD: // FILEIOVFD
- case symbol_kind::S_exp: // exp
- case symbol_kind::S_term: // term
- value.template destroy< Expression * > ();
- break;
-
- default:
- break;
- }
-
- Base::clear ();
- }
-
-#if YYDEBUG || 0
- /// The user-facing name of this symbol.
- const char *name () const YY_NOEXCEPT
- {
- return Parser::symbol_name (this->kind ());
- }
-#endif // #if YYDEBUG || 0
-
-
- /// Backward compatibility (Bison 3.6).
- symbol_kind_type type_get () const YY_NOEXCEPT;
-
- /// Whether empty.
- bool empty () const YY_NOEXCEPT;
-
- /// Destructive move, \a s is emptied into this.
- void move (basic_symbol& s);
-
- /// The semantic value.
- semantic_type value;
-
- private:
-#if YY_CPLUSPLUS < 201103L
- /// Assignment operator.
- basic_symbol& operator= (const basic_symbol& that);
-#endif
- };
-
- /// Type access provider for token (enum) based symbols.
- struct by_kind
- {
- /// Default constructor.
- by_kind ();
-
-#if 201103L <= YY_CPLUSPLUS
- /// Move constructor.
- by_kind (by_kind&& that);
-#endif
-
- /// Copy constructor.
- by_kind (const by_kind& that);
-
- /// The symbol kind as needed by the constructor.
- typedef token_kind_type kind_type;
-
- /// Constructor from (external) token numbers.
- by_kind (kind_type t);
-
- /// Record that this symbol is empty.
- void clear () YY_NOEXCEPT;
-
- /// Steal the symbol kind from \a that.
- void move (by_kind& that);
-
- /// The (internal) type number (corresponding to \a type).
- /// \a empty when empty.
- symbol_kind_type kind () const YY_NOEXCEPT;
-
- /// Backward compatibility (Bison 3.6).
- symbol_kind_type type_get () const YY_NOEXCEPT;
-
- /// The symbol kind.
- /// \a S_YYEMPTY when empty.
- symbol_kind_type kind_;
- };
-
- /// Backward compatibility for a private implementation detail (Bison 3.6).
- typedef by_kind by_type;
-
- /// "External" symbols: returned by the scanner.
- struct symbol_type : basic_symbol<by_kind>
- {
- /// Superclass.
- typedef basic_symbol<by_kind> super_type;
-
- /// Empty symbol.
- symbol_type () {}
-
- /// Constructor for valueless symbols, and symbols from each type.
-#if 201103L <= YY_CPLUSPLUS
- symbol_type (int tok)
- : super_type(token_type (tok))
-#else
- symbol_type (int tok)
- : super_type(token_type (tok))
-#endif
- {
- YY_ASSERT (tok == token::L_YYEOF
- || (token::L_YYerror <= tok && tok <= token::L_RPAR)
- || tok == token::L_HASPROP
- || (token::L_IN <= tok && tok <= 317));
- }
-#if 201103L <= YY_CPLUSPLUS
- symbol_type (int tok, Expression * v)
- : super_type(token_type (tok), std::move (v))
-#else
- symbol_type (int tok, const Expression *& v)
- : super_type(token_type (tok), v)
-#endif
- {
- YY_ASSERT ((token::L_NUM <= tok && tok <= token::L_FNAME)
- || (token::L_JGROUP <= tok && tok <= token::L_FILEIOVFD));
- }
- };
-
- /// Build a parser object.
- Parser (QL::Result &result_yyarg);
- virtual ~Parser ();
-
-#if 201103L <= YY_CPLUSPLUS
- /// Non copyable.
- Parser (const Parser&) = delete;
- /// Non copyable.
- Parser& operator= (const Parser&) = delete;
-#endif
-
- /// Parse. An alias for parse ().
- /// \returns 0 iff parsing succeeded.
- int operator() ();
-
- /// Parse.
- /// \returns 0 iff parsing succeeded.
- virtual int parse ();
-
-#if YYDEBUG
- /// The current debugging stream.
- std::ostream& debug_stream () const YY_ATTRIBUTE_PURE;
- /// Set the current debugging stream.
- void set_debug_stream (std::ostream &);
-
- /// Type for debugging levels.
- typedef int debug_level_type;
- /// The current debugging level.
- debug_level_type debug_level () const YY_ATTRIBUTE_PURE;
- /// Set the current debugging level.
- void set_debug_level (debug_level_type l);
-#endif
-
- /// Report a syntax error.
- /// \param msg a description of the syntax error.
- virtual void error (const std::string& msg);
-
- /// Report a syntax error.
- void error (const syntax_error& err);
-
-#if YYDEBUG || 0
- /// The user-facing name of the symbol whose (internal) number is
- /// YYSYMBOL. No bounds checking.
- static const char *symbol_name (symbol_kind_type yysymbol);
-#endif // #if YYDEBUG || 0
-
-
- // Implementation of make_symbol for each symbol type.
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_YYEOF ()
- {
- return symbol_type (token::L_YYEOF);
- }
-#else
- static
- symbol_type
- make_YYEOF ()
- {
- return symbol_type (token::L_YYEOF);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_YYerror ()
- {
- return symbol_type (token::L_YYerror);
- }
-#else
- static
- symbol_type
- make_YYerror ()
- {
- return symbol_type (token::L_YYerror);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_YYUNDEF ()
- {
- return symbol_type (token::L_YYUNDEF);
- }
-#else
- static
- symbol_type
- make_YYUNDEF ()
- {
- return symbol_type (token::L_YYUNDEF);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_LPAR ()
- {
- return symbol_type (token::L_LPAR);
- }
-#else
- static
- symbol_type
- make_LPAR ()
- {
- return symbol_type (token::L_LPAR);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_RPAR ()
- {
- return symbol_type (token::L_RPAR);
- }
-#else
- static
- symbol_type
- make_RPAR ()
- {
- return symbol_type (token::L_RPAR);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_NUM (Expression * v)
- {
- return symbol_type (token::L_NUM, std::move (v));
- }
-#else
- static
- symbol_type
- make_NUM (const Expression *& v)
- {
- return symbol_type (token::L_NUM, v);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_NAME (Expression * v)
- {
- return symbol_type (token::L_NAME, std::move (v));
- }
-#else
- static
- symbol_type
- make_NAME (const Expression *& v)
- {
- return symbol_type (token::L_NAME, v);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_FNAME (Expression * v)
- {
- return symbol_type (token::L_FNAME, std::move (v));
- }
-#else
- static
- symbol_type
- make_FNAME (const Expression *& v)
- {
- return symbol_type (token::L_FNAME, v);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_HASPROP ()
- {
- return symbol_type (token::L_HASPROP);
- }
-#else
- static
- symbol_type
- make_HASPROP ()
- {
- return symbol_type (token::L_HASPROP);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_JGROUP (Expression * v)
- {
- return symbol_type (token::L_JGROUP, std::move (v));
- }
-#else
- static
- symbol_type
- make_JGROUP (const Expression *& v)
- {
- return symbol_type (token::L_JGROUP, v);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_JPARENT (Expression * v)
- {
- return symbol_type (token::L_JPARENT, std::move (v));
- }
-#else
- static
- symbol_type
- make_JPARENT (const Expression *& v)
- {
- return symbol_type (token::L_JPARENT, v);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_QSTR (Expression * v)
- {
- return symbol_type (token::L_QSTR, std::move (v));
- }
-#else
- static
- symbol_type
- make_QSTR (const Expression *& v)
- {
- return symbol_type (token::L_QSTR, v);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_FILEIOVFD (Expression * v)
- {
- return symbol_type (token::L_FILEIOVFD, std::move (v));
- }
-#else
- static
- symbol_type
- make_FILEIOVFD (const Expression *& v)
- {
- return symbol_type (token::L_FILEIOVFD, v);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_IN ()
- {
- return symbol_type (token::L_IN);
- }
-#else
- static
- symbol_type
- make_IN ()
- {
- return symbol_type (token::L_IN);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_SOME ()
- {
- return symbol_type (token::L_SOME);
- }
-#else
- static
- symbol_type
- make_SOME ()
- {
- return symbol_type (token::L_SOME);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_ORDR ()
- {
- return symbol_type (token::L_ORDR);
- }
-#else
- static
- symbol_type
- make_ORDR ()
- {
- return symbol_type (token::L_ORDR);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_COMMA ()
- {
- return symbol_type (token::L_COMMA);
- }
-#else
- static
- symbol_type
- make_COMMA ()
- {
- return symbol_type (token::L_COMMA);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_QWE ()
- {
- return symbol_type (token::L_QWE);
- }
-#else
- static
- symbol_type
- make_QWE ()
- {
- return symbol_type (token::L_QWE);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_COLON ()
- {
- return symbol_type (token::L_COLON);
- }
-#else
- static
- symbol_type
- make_COLON ()
- {
- return symbol_type (token::L_COLON);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_AND ()
- {
- return symbol_type (token::L_AND);
- }
-#else
- static
- symbol_type
- make_AND ()
- {
- return symbol_type (token::L_AND);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_OR ()
- {
- return symbol_type (token::L_OR);
- }
-#else
- static
- symbol_type
- make_OR ()
- {
- return symbol_type (token::L_OR);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_EQV ()
- {
- return symbol_type (token::L_EQV);
- }
-#else
- static
- symbol_type
- make_EQV ()
- {
- return symbol_type (token::L_EQV);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_NEQV ()
- {
- return symbol_type (token::L_NEQV);
- }
-#else
- static
- symbol_type
- make_NEQV ()
- {
- return symbol_type (token::L_NEQV);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_BITAND ()
- {
- return symbol_type (token::L_BITAND);
- }
-#else
- static
- symbol_type
- make_BITAND ()
- {
- return symbol_type (token::L_BITAND);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_BITOR ()
- {
- return symbol_type (token::L_BITOR);
- }
-#else
- static
- symbol_type
- make_BITOR ()
- {
- return symbol_type (token::L_BITOR);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_BITXOR ()
- {
- return symbol_type (token::L_BITXOR);
- }
-#else
- static
- symbol_type
- make_BITXOR ()
- {
- return symbol_type (token::L_BITXOR);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_EQ ()
- {
- return symbol_type (token::L_EQ);
- }
-#else
- static
- symbol_type
- make_EQ ()
- {
- return symbol_type (token::L_EQ);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_NE ()
- {
- return symbol_type (token::L_NE);
- }
-#else
- static
- symbol_type
- make_NE ()
- {
- return symbol_type (token::L_NE);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_LT ()
- {
- return symbol_type (token::L_LT);
- }
-#else
- static
- symbol_type
- make_LT ()
- {
- return symbol_type (token::L_LT);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_GT ()
- {
- return symbol_type (token::L_GT);
- }
-#else
- static
- symbol_type
- make_GT ()
- {
- return symbol_type (token::L_GT);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_LE ()
- {
- return symbol_type (token::L_LE);
- }
-#else
- static
- symbol_type
- make_LE ()
- {
- return symbol_type (token::L_LE);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_GE ()
- {
- return symbol_type (token::L_GE);
- }
-#else
- static
- symbol_type
- make_GE ()
- {
- return symbol_type (token::L_GE);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_LS ()
- {
- return symbol_type (token::L_LS);
- }
-#else
- static
- symbol_type
- make_LS ()
- {
- return symbol_type (token::L_LS);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_RS ()
- {
- return symbol_type (token::L_RS);
- }
-#else
- static
- symbol_type
- make_RS ()
- {
- return symbol_type (token::L_RS);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_ADD ()
- {
- return symbol_type (token::L_ADD);
- }
-#else
- static
- symbol_type
- make_ADD ()
- {
- return symbol_type (token::L_ADD);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_MINUS ()
- {
- return symbol_type (token::L_MINUS);
- }
-#else
- static
- symbol_type
- make_MINUS ()
- {
- return symbol_type (token::L_MINUS);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_MUL ()
- {
- return symbol_type (token::L_MUL);
- }
-#else
- static
- symbol_type
- make_MUL ()
- {
- return symbol_type (token::L_MUL);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_DIV ()
- {
- return symbol_type (token::L_DIV);
- }
-#else
- static
- symbol_type
- make_DIV ()
- {
- return symbol_type (token::L_DIV);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_REM ()
- {
- return symbol_type (token::L_REM);
- }
-#else
- static
- symbol_type
- make_REM ()
- {
- return symbol_type (token::L_REM);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_DEG ()
- {
- return symbol_type (token::L_DEG);
- }
-#else
- static
- symbol_type
- make_DEG ()
- {
- return symbol_type (token::L_DEG);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_NOT ()
- {
- return symbol_type (token::L_NOT);
- }
-#else
- static
- symbol_type
- make_NOT ()
- {
- return symbol_type (token::L_NOT);
- }
-#endif
-#if 201103L <= YY_CPLUSPLUS
- static
- symbol_type
- make_BITNOT ()
- {
- return symbol_type (token::L_BITNOT);
- }
-#else
- static
- symbol_type
- make_BITNOT ()
- {
- return symbol_type (token::L_BITNOT);
- }
-#endif
-
-
- private:
-#if YY_CPLUSPLUS < 201103L
- /// Non copyable.
- Parser (const Parser&);
- /// Non copyable.
- Parser& operator= (const Parser&);
-#endif
-
-
- /// Stored state numbers (used for stacks).
- typedef signed char state_type;
-
- /// Compute post-reduction state.
- /// \param yystate the current state
- /// \param yysym the nonterminal to push on the stack
- static state_type yy_lr_goto_state_ (state_type yystate, int yysym);
-
- /// Whether the given \c yypact_ value indicates a defaulted state.
- /// \param yyvalue the value to check
- static bool yy_pact_value_is_default_ (int yyvalue);
-
- /// Whether the given \c yytable_ value indicates a syntax error.
- /// \param yyvalue the value to check
- static bool yy_table_value_is_error_ (int yyvalue);
-
- static const signed char yypact_ninf_;
- static const signed char yytable_ninf_;
-
- /// Convert a scanner token kind \a t to a symbol kind.
- /// In theory \a t should be a token_kind_type, but character literals
- /// are valid, yet not members of the token_type enum.
- static symbol_kind_type yytranslate_ (int t);
-
-#if YYDEBUG || 0
- /// For a symbol, its name in clear.
- static const char* const yytname_[];
-#endif // #if YYDEBUG || 0
-
-
- // Tables.
- // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- // STATE-NUM.
- static const short yypact_[];
-
- // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
- // Performed when YYTABLE does not specify something else to do. Zero
- // means the default is an error.
- static const signed char yydefact_[];
-
- // YYPGOTO[NTERM-NUM].
- static const signed char yypgoto_[];
-
- // YYDEFGOTO[NTERM-NUM].
- static const signed char yydefgoto_[];
-
- // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
- // positive, shift that token. If negative, reduce the rule whose
- // number is the opposite. If YYTABLE_NINF, syntax error.
- static const signed char yytable_[];
-
- static const signed char yycheck_[];
-
- // YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- // symbol of state STATE-NUM.
- static const signed char yystos_[];
-
- // YYR1[YYN] -- Symbol number of symbol that rule YYN derives.
- static const signed char yyr1_[];
-
- // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.
- static const signed char yyr2_[];
-
-
-#if YYDEBUG
- // YYRLINE[YYN] -- Source line where rule number YYN was defined.
- static const unsigned char yyrline_[];
- /// Report on the debug stream that the rule \a r is going to be reduced.
- virtual void yy_reduce_print_ (int r) const;
- /// Print the state stack on the debug stream.
- virtual void yy_stack_print_ () const;
-
- /// Debugging level.
- int yydebug_;
- /// Debug stream.
- std::ostream* yycdebug_;
-
- /// \brief Display a symbol kind, value and location.
- /// \param yyo The output stream.
- /// \param yysym The symbol.
- template <typename Base>
- void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const;
-#endif
-
- /// \brief Reclaim the memory associated to a symbol.
- /// \param yymsg Why this token is reclaimed.
- /// If null, print nothing.
- /// \param yysym The symbol.
- template <typename Base>
- void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const;
-
- private:
- /// Type access provider for state based symbols.
- struct by_state
- {
- /// Default constructor.
- by_state () YY_NOEXCEPT;
-
- /// The symbol kind as needed by the constructor.
- typedef state_type kind_type;
-
- /// Constructor.
- by_state (kind_type s) YY_NOEXCEPT;
-
- /// Copy constructor.
- by_state (const by_state& that) YY_NOEXCEPT;
-
- /// Record that this symbol is empty.
- void clear () YY_NOEXCEPT;
-
- /// Steal the symbol kind from \a that.
- void move (by_state& that);
-
- /// The symbol kind (corresponding to \a state).
- /// \a symbol_kind::S_YYEMPTY when empty.
- symbol_kind_type kind () const YY_NOEXCEPT;
-
- /// The state number used to denote an empty symbol.
- /// We use the initial state, as it does not have a value.
- enum { empty_state = 0 };
-
- /// The state.
- /// \a empty when empty.
- state_type state;
- };
-
- /// "Internal" symbol: element of the stack.
- struct stack_symbol_type : basic_symbol<by_state>
- {
- /// Superclass.
- typedef basic_symbol<by_state> super_type;
- /// Construct an empty symbol.
- stack_symbol_type ();
- /// Move or copy construction.
- stack_symbol_type (YY_RVREF (stack_symbol_type) that);
- /// Steal the contents from \a sym to build this.
- stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym);
-#if YY_CPLUSPLUS < 201103L
- /// Assignment, needed by push_back by some old implementations.
- /// Moves the contents of that.
- stack_symbol_type& operator= (stack_symbol_type& that);
-
- /// Assignment, needed by push_back by other implementations.
- /// Needed by some other old implementations.
- stack_symbol_type& operator= (const stack_symbol_type& that);
-#endif
- };
-
- /// A stack with random access from its top.
- template <typename T, typename S = std::vector<T> >
- class stack
- {
- public:
- // Hide our reversed order.
- typedef typename S::iterator iterator;
- typedef typename S::const_iterator const_iterator;
- typedef typename S::size_type size_type;
- typedef typename std::ptrdiff_t index_type;
-
- stack (size_type n = 200)
- : seq_ (n)
- {}
-
-#if 201103L <= YY_CPLUSPLUS
- /// Non copyable.
- stack (const stack&) = delete;
- /// Non copyable.
- stack& operator= (const stack&) = delete;
-#endif
-
- /// Random access.
- ///
- /// Index 0 returns the topmost element.
- const T&
- operator[] (index_type i) const
- {
- return seq_[size_type (size () - 1 - i)];
- }
-
- /// Random access.
- ///
- /// Index 0 returns the topmost element.
- T&
- operator[] (index_type i)
- {
- return seq_[size_type (size () - 1 - i)];
- }
-
- /// Steal the contents of \a t.
- ///
- /// Close to move-semantics.
- void
- push (YY_MOVE_REF (T) t)
- {
- seq_.push_back (T ());
- operator[] (0).move (t);
- }
-
- /// Pop elements from the stack.
- void
- pop (std::ptrdiff_t n = 1) YY_NOEXCEPT
- {
- for (; 0 < n; --n)
- seq_.pop_back ();
- }
-
- /// Pop all elements from the stack.
- void
- clear () YY_NOEXCEPT
- {
- seq_.clear ();
- }
-
- /// Number of elements on the stack.
- index_type
- size () const YY_NOEXCEPT
- {
- return index_type (seq_.size ());
- }
-
- /// Iterator on top of the stack (going downwards).
- const_iterator
- begin () const YY_NOEXCEPT
- {
- return seq_.begin ();
- }
-
- /// Bottom of the stack.
- const_iterator
- end () const YY_NOEXCEPT
- {
- return seq_.end ();
- }
-
- /// Present a slice of the top of a stack.
- class slice
- {
- public:
- slice (const stack& stack, index_type range)
- : stack_ (stack)
- , range_ (range)
- {}
-
- const T&
- operator[] (index_type i) const
- {
- return stack_[range_ - i];
- }
-
- private:
- const stack& stack_;
- index_type range_;
- };
-
- private:
-#if YY_CPLUSPLUS < 201103L
- /// Non copyable.
- stack (const stack&);
- /// Non copyable.
- stack& operator= (const stack&);
-#endif
- /// The wrapped container.
- S seq_;
- };
-
-
- /// Stack type.
- typedef stack<stack_symbol_type> stack_type;
-
- /// The stack.
- stack_type yystack_;
-
- /// Push a new state on the stack.
- /// \param m a debug message to display
- /// if null, no trace is output.
- /// \param sym the symbol
- /// \warning the contents of \a s.value is stolen.
- void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym);
-
- /// Push a new look ahead token on the state on the stack.
- /// \param m a debug message to display
- /// if null, no trace is output.
- /// \param s the state
- /// \param sym the symbol (for its value and location).
- /// \warning the contents of \a sym.value is stolen.
- void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym);
-
- /// Pop \a n symbols from the stack.
- void yypop_ (int n = 1);
-
- /// Constants.
- enum
- {
- yylast_ = 279, ///< Last index in yytable_.
- yynnts_ = 4, ///< Number of nonterminal symbols.
- yyfinal_ = 24 ///< Termination state number.
- };
-
-
- // User arguments.
- QL::Result &result;
-
- };
-
- inline
- Parser::symbol_kind_type
- Parser::yytranslate_ (int t)
- {
- // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to
- // TOKEN-NUM as returned by yylex.
- static
- const signed char
- translate_table[] =
- {
- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62
- };
- // Last valid token kind.
- const int code_max = 317;
-
- if (t <= 0)
- return symbol_kind::S_YYEOF;
- else if (t <= code_max)
- return YY_CAST (symbol_kind_type, translate_table[t]);
- else
- return symbol_kind::S_YYUNDEF;
- }
-
- // basic_symbol.
- template <typename Base>
- Parser::basic_symbol<Base>::basic_symbol (const basic_symbol& that)
- : Base (that)
- , value ()
- {
- switch (this->kind ())
- {
- case symbol_kind::S_NUM: // "number"
- case symbol_kind::S_NAME: // "name"
- case symbol_kind::S_FNAME: // FNAME
- case symbol_kind::S_JGROUP: // JGROUP
- case symbol_kind::S_JPARENT: // JPARENT
- case symbol_kind::S_QSTR: // QSTR
- case symbol_kind::S_FILEIOVFD: // FILEIOVFD
- case symbol_kind::S_exp: // exp
- case symbol_kind::S_term: // term
- value.copy< Expression * > (YY_MOVE (that.value));
- break;
-
- default:
- break;
- }
-
- }
-
-
-
- template <typename Base>
- Parser::symbol_kind_type
- Parser::basic_symbol<Base>::type_get () const YY_NOEXCEPT
- {
- return this->kind ();
- }
-
- template <typename Base>
- bool
- Parser::basic_symbol<Base>::empty () const YY_NOEXCEPT
- {
- return this->kind () == symbol_kind::S_YYEMPTY;
- }
-
- template <typename Base>
- void
- Parser::basic_symbol<Base>::move (basic_symbol& s)
- {
- super_type::move (s);
- switch (this->kind ())
- {
- case symbol_kind::S_NUM: // "number"
- case symbol_kind::S_NAME: // "name"
- case symbol_kind::S_FNAME: // FNAME
- case symbol_kind::S_JGROUP: // JGROUP
- case symbol_kind::S_JPARENT: // JPARENT
- case symbol_kind::S_QSTR: // QSTR
- case symbol_kind::S_FILEIOVFD: // FILEIOVFD
- case symbol_kind::S_exp: // exp
- case symbol_kind::S_term: // term
- value.move< Expression * > (YY_MOVE (s.value));
- break;
-
- default:
- break;
- }
-
- }
-
- // by_kind.
- inline
- Parser::by_kind::by_kind ()
- : kind_ (symbol_kind::S_YYEMPTY)
- {}
-
-#if 201103L <= YY_CPLUSPLUS
- inline
- Parser::by_kind::by_kind (by_kind&& that)
- : kind_ (that.kind_)
- {
- that.clear ();
- }
-#endif
-
- inline
- Parser::by_kind::by_kind (const by_kind& that)
- : kind_ (that.kind_)
- {}
-
- inline
- Parser::by_kind::by_kind (token_kind_type t)
- : kind_ (yytranslate_ (t))
- {}
-
- inline
- void
- Parser::by_kind::clear () YY_NOEXCEPT
- {
- kind_ = symbol_kind::S_YYEMPTY;
- }
-
- inline
- void
- Parser::by_kind::move (by_kind& that)
- {
- kind_ = that.kind_;
- that.clear ();
- }
-
- inline
- Parser::symbol_kind_type
- Parser::by_kind::kind () const YY_NOEXCEPT
- {
- return kind_;
- }
-
- inline
- Parser::symbol_kind_type
- Parser::by_kind::type_get () const YY_NOEXCEPT
- {
- return this->kind ();
- }
-
-#line 50 "QLParser.yy"
-} // QL
-#line 2034 "QLParser.tab.hh"
-
-
-
-
-#endif // !YY_YY_QLPARSER_TAB_HH_INCLUDED
// cd gprofng/src && bison QLParser.yy
// For "api.parser.class"
-%require "3.3"
+%require "3.0"
%language "C++"
%code top {
namespace QL
{
static QL::Parser::symbol_type yylex (QL::Result &result);
+
+ static Expression *
+ processName (std::string str)
+ {
+ const char *name = str.c_str();
+ int propID = dbeSession->getPropIdByName (name);
+ if (propID != PROP_NONE)
+ return new Expression (Expression::OP_NAME,
+ new Expression (Expression::OP_NUM, (uint64_t) propID));
+
+ // If a name is not statically known try user defined objects
+ Expression *expr = dbeSession->findObjDefByName (name);
+ if (expr != NULL)
+ return expr->copy();
+
+ throw Parser::syntax_error ("Name not found");
+ }
}
}
%defines
%define api.namespace {QL}
-%define api.parser.class {Parser}
+// in Bison 3.3, use %define api.parser.class {Parser} instead parser_class_name
+%define parser_class_name {Parser}
%define api.token.constructor
%define api.value.type variant
// Later: api.value.automove
%token LPAR "("
RPAR ")"
- NUM "number"
- NAME "name"
- FNAME
HASPROP
- JGROUP
- JPARENT
- QSTR
FILEIOVFD
+%token YYEOF 0
+%token <uint64_t> NUM FNAME JGROUP JPARENT QSTR
+%token <std::string> NAME
+
%nonassoc IN SOME ORDR
%left COMMA ","
%right QWE "?"
NOT "!"
BITNOT "~"
-%type <Expression *> QSTR NUM NAME FNAME JGROUP JPARENT FILEIOVFD exp term
+%type <Expression *> exp term
-%destructor { delete $$; } <*>;
+// %destructor { delete $$; } <Expression *>;
%%
S: /* empty */ { result.out = new Expression (Expression::OP_NUM, (uint64_t) 1); }
-| exp { result.out = new Expression ($1); }
+| exp { result.out = $1; }
exp: exp DEG exp { $$ = new Expression (Expression::OP_DEG, $1, $3); } /* dead? */
| exp MUL exp { $$ = new Expression (Expression::OP_MUL, $1, $3); }
| exp OR exp { $$ = new Expression (Expression::OP_OR, $1, $3); }
| exp NEQV exp { $$ = new Expression (Expression::OP_NEQV, $1, $3); } /* dead? */
| exp EQV exp { $$ = new Expression (Expression::OP_EQV, $1, $3); } /* dead? */
- | exp QWE exp COLON exp { Expression colon = Expression (Expression::OP_COLON, $3, $5);
- $$ = new Expression (Expression::OP_QWE, $1, &colon); }
+ | exp QWE exp COLON exp
+ {
+ $$ = new Expression (Expression::OP_QWE, $1,
+ new Expression (Expression::OP_COLON, $3, $5));
+ }
| exp COMMA exp { $$ = new Expression (Expression::OP_COMMA, $1, $3); }
| exp IN exp { $$ = new Expression (Expression::OP_IN, $1, $3); }
| exp SOME IN exp { $$ = new Expression (Expression::OP_SOMEIN, $1, $4); }
| exp ORDR IN exp { $$ = new Expression (Expression::OP_ORDRIN, $1, $4); }
- | term { $$ = new Expression ($1); }
-
-term: MINUS term { Expression num = Expression (Expression::OP_NUM, (uint64_t) 0);
- $$ = new Expression (Expression::OP_MINUS, &num, $2); }
- | NOT term { $$ = new Expression (Expression::OP_NOT, $2, NULL); }
- | BITNOT term { $$ = new Expression (Expression::OP_BITNOT, $2, NULL); }
- | LPAR exp RPAR { $$ = new Expression ($2); }
- | FNAME LPAR QSTR RPAR { $$ = new Expression (Expression::OP_FUNC, $1, $3); }
- | HASPROP LPAR NAME RPAR { $$ = new Expression (Expression::OP_HASPROP, $3, NULL); }
- | JGROUP LPAR QSTR RPAR { $$ = new Expression (Expression::OP_JAVA, $1, $3); }
- | JPARENT LPAR QSTR RPAR { $$ = new Expression (Expression::OP_JAVA, $1, $3); }
- | FILEIOVFD LPAR QSTR RPAR { $$ = new Expression (Expression::OP_FILE, $1, $3); }
- | NUM { $$ = new Expression ($1); }
- | NAME { $$ = new Expression ($1); }
+ | term { $$ = $1; }
+
+term: MINUS term
+ {
+ $$ = new Expression (Expression::OP_MINUS,
+ new Expression (Expression::OP_NUM, (uint64_t) 0), $2);
+ }
+ | NOT term { $$ = new Expression (Expression::OP_NOT, $2); }
+ | BITNOT term { $$ = new Expression (Expression::OP_BITNOT, $2); }
+ | LPAR exp RPAR { $$ = $2; }
+ | FNAME LPAR QSTR RPAR
+ {
+ $$ = new Expression (Expression::OP_FUNC,
+ new Expression (Expression::OP_NUM, $1),
+ new Expression (Expression::OP_NUM, $3));
+ }
+ | HASPROP LPAR NAME RPAR
+ {
+ $$ = new Expression (Expression::OP_HASPROP,
+ new Expression (Expression::OP_NUM, processName($3)));
+ }
+ | JGROUP LPAR QSTR RPAR
+ {
+ $$ = new Expression (Expression::OP_JAVA,
+ new Expression (Expression::OP_NUM, $1),
+ new Expression (Expression::OP_NUM, $3));
+ }
+ | JPARENT LPAR QSTR RPAR
+ {
+ $$ = new Expression (Expression::OP_JAVA,
+ new Expression (Expression::OP_NUM, $1),
+ new Expression (Expression::OP_NUM, $3));
+ }
+ | FILEIOVFD LPAR QSTR RPAR
+ {
+ $$ = new Expression (Expression::OP_FILE,
+ new Expression (Expression::OP_NUM, (uint64_t) 0),
+ new Expression (Expression::OP_NUM, $3));
+ }
+ | NUM { $$ = new Expression (Expression::OP_NUM, $1); }
+ | NAME { $$ = processName($1); }
%%
return tok;
}
- static Expression *
- processName (char *name)
- {
- int propID = dbeSession->getPropIdByName (name);
- if (propID != PROP_NONE)
- {
- Expression *expr = new Expression (Expression::OP_NUM, (uint64_t) propID);
- Expression *ret = new Expression (Expression::OP_NAME, expr);
- delete expr;
- return ret;
- }
-
- // If a name is not statically known try user defined objects
- Expression *expr = dbeSession->findObjDefByName (name);
- if (expr != NULL)
- return expr->copy();
-
- throw Parser::syntax_error ("Name not found");
- }
-
static Parser::symbol_type
yylex (QL::Result &result)
{
switch (c)
{
+ case '\0':
case '\n': return Parser::make_YYEOF ();
case '(': return Parser::make_LPAR () ;
case ')': return Parser::make_RPAR ();
case '"':
*ptr = (char)0;
// XXX omazur: need new string type
- return Parser::make_QSTR (new Expression (Expression::OP_NUM, (uint64_t) str));
+ return Parser::make_QSTR ((uint64_t) str);
case 0:
case '\n':
free (str);
lval = lval * base + digit;
c = result.in.get ();
}
- return Parser::make_NUM (new Expression (Expression::OP_NUM, lval));
+ return Parser::make_NUM (lval);
}
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))
else if (strcasecmp (name, NTXT ("ORDERED")) == 0)
return Parser::make_ORDR ();
else if (strcasecmp (name, NTXT ("TRUE")) == 0)
- return Parser::make_NUM (new Expression (Expression::OP_NUM, (uint64_t) 1));
+ return Parser::make_NUM ((uint64_t) 1);
else if (strcasecmp (name, NTXT ("FALSE")) == 0)
- return Parser::make_NUM (new Expression (Expression::OP_NUM, (uint64_t) 0));
+ return Parser::make_NUM ((uint64_t) 0);
else if (strcasecmp (name, NTXT ("FNAME")) == 0)
- return Parser::make_FNAME (new Expression (Expression::OP_NUM, Expression::FUNC_FNAME));
+ return Parser::make_FNAME (Expression::FUNC_FNAME);
else if (strcasecmp (name, NTXT ("HAS_PROP")) == 0)
return Parser::make_HASPROP ();
else if (strcasecmp (name, NTXT ("JGROUP")) == 0)
- return Parser::make_JGROUP (new Expression (Expression::OP_NUM, Expression::JAVA_JGROUP));
+ return Parser::make_JGROUP (Expression::JAVA_JGROUP);
else if (strcasecmp (name, NTXT ("JPARENT")) == 0 )
- return Parser::make_JPARENT (new Expression (Expression::OP_NUM, Expression::JAVA_JPARENT));
+ return Parser::make_JPARENT (Expression::JAVA_JPARENT);
else if (strcasecmp (name, NTXT ("DNAME")) == 0)
- return Parser::make_FNAME (new Expression (Expression::OP_NUM, Expression::FUNC_DNAME));
+ return Parser::make_FNAME (Expression::FUNC_DNAME);
else if (strcasecmp (name, NTXT ("FILEIOVFD")) == 0 )
- return Parser::make_FILEIOVFD (new Expression (Expression::OP_NUM, (uint64_t) 0));
+ return Parser::make_FILEIOVFD ();
- return Parser::make_NAME (processName (name));
+ std::string nm = std::string (name);
+ return Parser::make_NAME (nm);
}
throw Parser::syntax_error ("Syntax error");