r5956 - software/gofind

Miriam Ruiz baby-guest at alioth.debian.org
Fri Feb 29 11:44:16 UTC 2008


Author: baby-guest
Date: 2008-02-29 11:44:16 +0000 (Fri, 29 Feb 2008)
New Revision: 5956

Added:
   software/gofind/boolparser.cpp
   software/gofind/boolparser.h
Removed:
   software/gofind/BoolExprParser.cpp
   software/gofind/BoolExprParser.h
Log:
Fixed parser class



Deleted: software/gofind/BoolExprParser.cpp
===================================================================
--- software/gofind/BoolExprParser.cpp	2008-02-29 11:42:51 UTC (rev 5955)
+++ software/gofind/BoolExprParser.cpp	2008-02-29 11:44:16 UTC (rev 5956)
@@ -1,180 +0,0 @@
-/*  $Id: BoolExprParser.cpp,v 1.11 2005/05/09 02:43:19 sarrazip Exp $
-    BoolExprParser.cpp - Boolean expression parser and syntax tree builder
-
-    boolstuff - Disjunctive Normal Form boolean expression library
-    Copyright (C) 2002-2005 Pierre Sarrazin <http://sarrazip.com/>
-
-    This program is free software; you can redistribute it and/or
-    modify it under the terms of the GNU General Public License
-    as published by the Free Software Foundation; either version 2
-    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, write to the Free Software
-    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-    02111-1307, USA.
-*/
-
-#include <boolstuff/BoolExprParser.h>
-
-#include <cassert>
-#include <memory>
-
-using namespace std;
-using namespace boolstuff;
-
-
-BoolExprParser::BoolExprParser()
-  : curInput(),
-    curIndex(0)
-{
-}
-
-
-BoolExprParser::~BoolExprParser()
-{
-}
-
-
-BoolExpr<string> *
-BoolExprParser::parse(const std::string &expr) throw(Error)
-{
-    curInput = expr;
-    curIndex = 0;
-
-    auto_ptr< BoolExpr<string> > root(parseExpr());
-    if (!atEnd())
-        throw Error(curIndex, Error::GARBAGE_AT_END);
-    return root.release();
-}
-
-
-BoolExpr<string> *
-BoolExprParser::parseExpr() throw(Error)
-{
-    auto_ptr< BoolExpr<string> > left(parseTerm());
-
-    if (!tokenSeen("|"))
-        return left.release();
-
-    skipToken("|");
-    BoolExpr<string> *right = parseExpr();  // may throw
-    return new BoolExpr<string>(BoolExpr<string>::OR, left.release(), right);
-}
-
-
-BoolExpr<string> *
-BoolExprParser::parseTerm() throw(Error)
-{
-    auto_ptr< BoolExpr<string> > left(parseFactor());
-
-    if (!tokenSeen("&"))
-        return left.release();
-
-    skipToken("&");
-    BoolExpr<string> *right = parseTerm();  // may throw
-    return new BoolExpr<string>(BoolExpr<string>::AND, left.release(), right);
-}
-
-
-BoolExpr<string> *
-BoolExprParser::parseFactor() throw(Error)
-{
-    bool v = true;
-    while (tokenSeen("!"))
-    {
-        skipToken("!");
-        v = !v;
-    }
-
-    BoolExpr<string> *atom = parseAtom();  // may throw
-    if (v)
-        return atom;
-
-    return new BoolExpr<string>(BoolExpr<string>::NOT, NULL, atom);
-}
-
-
-BoolExpr<string> *
-BoolExprParser::parseAtom() throw(Error)
-{
-    skipSpaces();
-    size_t startIndex = curIndex;
-    if (tokenSeen("("))
-    {
-        skipToken("(");
-        auto_ptr< BoolExpr<string> > expr(parseExpr());  // may throw
-
-        if (!tokenSeen(")"))
-            throw Error(startIndex, Error::RUNAWAY_PARENTHESIS);
-        skipToken(")");
-
-        return expr.release();
-    }
-
-    return parseString();  // may throw
-}
-
-
-BoolExpr<string> *
-BoolExprParser::parseString() throw(Error)
-{
-    skipSpaces();
-    size_t inputLen = curInput.length();
-    if (curIndex == inputLen)
-        throw Error(curIndex, Error::STRING_EXPECTED);
-    size_t startIndex = curIndex;
-    while (curIndex < inputLen && isStringChar(curInput[curIndex]))
-        curIndex++;
-    if (curIndex == startIndex)
-	throw Error(startIndex, Error::STRING_EXPECTED);
-    string s(curInput, startIndex, curIndex - startIndex);
-    return new BoolExpr<string>(s);
-}
-
-
-bool
-BoolExprParser::atEnd()
-{
-    skipSpaces();
-    return curIndex == curInput.length();
-}
-
-
-bool
-BoolExprParser::tokenSeen(const char *s)
-{
-    if (s == NULL)
-        return false;
-
-    skipSpaces();
-    return strncmp(curInput.c_str() + curIndex, s, strlen(s)) == 0;
-}
-
-
-void
-BoolExprParser::skipToken(const char *s)
-{
-    curIndex += strlen(s);
-}
-
-
-void
-BoolExprParser::skipSpaces()
-{
-    size_t inputLen = curInput.length();
-    while (curIndex < inputLen && isspace(curInput[curIndex]))
-        curIndex++;
-}
-
-
-bool
-BoolExprParser::isStringChar(char c) const
-{
-    return isalnum(c) || c == '_';
-}

Deleted: software/gofind/BoolExprParser.h
===================================================================
--- software/gofind/BoolExprParser.h	2008-02-29 11:42:51 UTC (rev 5955)
+++ software/gofind/BoolExprParser.h	2008-02-29 11:44:16 UTC (rev 5956)
@@ -1,116 +0,0 @@
-/*  $Id: BoolExprParser.h,v 1.12 2005/05/09 02:43:19 sarrazip Exp $
-    BoolExprParser.h - Boolean expression parser and syntax tree builder
-
-    boolstuff - Disjunctive Normal Form boolean expression library
-    Copyright (C) 2002-2005 Pierre Sarrazin <http://sarrazip.com/>
-
-    This program is free software; you can redistribute it and/or
-    modify it under the terms of the GNU General Public License
-    as published by the Free Software Foundation; either version 2
-    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, write to the Free Software
-    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-    02111-1307, USA.
-*/
-
-#ifndef _H_BoolExprParser
-#define _H_BoolExprParser
-
-#include <boolstuff/BoolExpr.h>
-
-#include <string>
-
-
-namespace boolstuff {
-
-
-/**
-    Parser for a language of boolean expressions.
-    The parse() method dynamically allocates a binary tree of nodes that
-    represents the syntactic structure of a textual boolean expression.
-*/
-class BoolExprParser
-{
-public:
-
-    /**  Error descriptor. */
-    class Error
-    {
-    public:
-	/** Possible error codes returned by the parser. */
-	enum Code
-	{
-	    GARBAGE_AT_END,
-	    RUNAWAY_PARENTHESIS,
-	    STRING_EXPECTED
-	};
-
-	/** Index (>=0) in the input string where the error was detected. */
-	size_t index;
-	/** Code that gives the type of the error */
-	Code code;
-
-	/**
-	    Initializes an error object with the given index and error.
-	*/
-	Error(size_t i, Code c) : index(i), code(c) {}
-    };
-
-
-    /**
-	Initializes the parser.
-    */
-    BoolExprParser();
-
-    /**
-	Destroys the parser and frees the associated resources.
-    */
-    ~BoolExprParser();
-
-    /**
-	Parses a textual boolean expression and creates a binary syntax tree.
-	Dynamically allocates a tree of nodes that represents the
-	syntactic structure of 'expr'.
-	The returned tree must eventually be destroyed with operator delete.
-
-	@param	expr	text of the boolean expression to parse
-	@returns	the root of the created tree
-	@throws	Error	describes a parsing error
-    */
-    BoolExpr<std::string> *parse(const std::string &expr) throw(Error);
-
-private:
-
-    std::string curInput;
-    size_t curIndex;
-
-    // Implementation methods:
-    BoolExpr<std::string> *parseExpr() throw(Error);
-    BoolExpr<std::string> *parseTerm() throw(Error);
-    BoolExpr<std::string> *parseFactor() throw(Error);
-    BoolExpr<std::string> *parseAtom() throw(Error);
-    BoolExpr<std::string> *parseString() throw(Error);
-
-    bool atEnd();
-    bool tokenSeen(const char *s);
-    void skipToken(const char *s);
-    void skipSpaces();
-    bool isStringChar(char c) const;
-
-    // Forbidden operations:
-    BoolExprParser(const BoolExprParser &);
-    BoolExprParser &operator = (const BoolExprParser &);
-};
-
-
-}  // namespace boolstuff
-
-
-#endif  /* _H_BoolExprParser */

Copied: software/gofind/boolparser.cpp (from rev 5955, software/gofind/BoolExprParser.cpp)
===================================================================
--- software/gofind/boolparser.cpp	                        (rev 0)
+++ software/gofind/boolparser.cpp	2008-02-29 11:44:16 UTC (rev 5956)
@@ -0,0 +1,162 @@
+/*
+    BoolParser.cpp - Boolean expression parser and syntax tree builder
+
+    boolstuff - Disjunctive Normal Form boolean expression library
+    Copyright (C) 2002-2005 Pierre Sarrazin <http://sarrazip.com/>
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 2
+    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, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+    02111-1307, USA.
+*/
+
+#include "common.h"
+#include "boolparser.h"
+
+#ifdef USE_UTF8
+#include "utf8.h"
+#endif
+
+#include <cassert>
+#include <memory>
+
+using namespace std;
+using namespace boolstuff;
+
+BoolParser::BoolParser() : curInput(), curIndex(0)
+{
+}
+
+BoolParser::~BoolParser()
+{
+}
+
+BoolExpr<string> * BoolParser::parse(const std::string &expr) throw(Error)
+{
+    curInput = expr;
+    curIndex = 0;
+
+    auto_ptr< BoolExpr<string> > root(parseExpr());
+    if (!atEnd())
+        throw Error(curIndex, Error::GARBAGE_AT_END);
+    return root.release();
+}
+
+BoolExpr<string> * BoolParser::parseExpr() throw(Error)
+{
+    auto_ptr< BoolExpr<string> > left(parseTerm());
+
+    if (!tokenSeen("|"))
+        return left.release();
+
+    skipToken("|");
+    BoolExpr<string> *right = parseExpr();  // may throw
+    return new BoolExpr<string>(BoolExpr<string>::OR, left.release(), right);
+}
+
+BoolExpr<string> * BoolParser::parseTerm() throw(Error)
+{
+    auto_ptr< BoolExpr<string> > left(parseFactor());
+
+    if (!tokenSeen("&"))
+        return left.release();
+
+    skipToken("&");
+    BoolExpr<string> *right = parseTerm();  // may throw
+    return new BoolExpr<string>(BoolExpr<string>::AND, left.release(), right);
+}
+
+BoolExpr<string> * BoolParser::parseFactor() throw(Error)
+{
+    bool v = true;
+    while (tokenSeen("!"))
+    {
+        skipToken("!");
+        v = !v;
+    }
+
+    BoolExpr<string> *atom = parseAtom();  // may throw
+    if (v)
+        return atom;
+
+    return new BoolExpr<string>(BoolExpr<string>::NOT, NULL, atom);
+}
+
+BoolExpr<string> * BoolParser::parseAtom() throw(Error)
+{
+    skipSpaces();
+    size_t startIndex = curIndex;
+    if (tokenSeen("("))
+    {
+        skipToken("(");
+        auto_ptr< BoolExpr<string> > expr(parseExpr());  // may throw
+
+        if (!tokenSeen(")"))
+            throw Error(startIndex, Error::RUNAWAY_PARENTHESIS);
+        skipToken(")");
+
+        return expr.release();
+    }
+
+    return parseString();  // may throw
+}
+
+// TODO: support UTF8
+BoolExpr<string> * BoolParser::parseString() throw(Error)
+{
+    skipSpaces();
+    size_t inputLen = curInput.length();
+    if (curIndex == inputLen)
+        throw Error(curIndex, Error::STRING_EXPECTED);
+    size_t startIndex = curIndex;
+    while (curIndex < inputLen && isStringChar(curInput[curIndex]))
+        curIndex++;
+    if (curIndex == startIndex)
+        throw Error(startIndex, Error::STRING_EXPECTED);
+    string s(curInput, startIndex, curIndex - startIndex);
+    return new BoolExpr<string>(s);
+}
+
+bool BoolParser::atEnd()
+{
+    skipSpaces();
+    return curIndex == curInput.length();
+}
+
+bool BoolParser::tokenSeen(const char *s)
+{
+    if (s == NULL)
+        return false;
+
+    skipSpaces();
+    return strncmp(curInput.c_str() + curIndex, s, strlen(s)) == 0;
+}
+
+void BoolParser::skipToken(const char *s)
+{
+    curIndex += strlen(s);
+}
+
+// TODO: support UTF8
+void BoolParser::skipSpaces()
+{
+    size_t inputLen = curInput.length();
+    while (curIndex < inputLen && isspace(curInput[curIndex]))
+        curIndex++;
+}
+
+// TODO: support UTF8
+bool BoolParser::isStringChar(char c) const
+{
+    return isalnum(c) || c == ':' || c == '_';
+}

Copied: software/gofind/boolparser.h (from rev 5955, software/gofind/BoolExprParser.h)
===================================================================
--- software/gofind/boolparser.h	                        (rev 0)
+++ software/gofind/boolparser.h	2008-02-29 11:44:16 UTC (rev 5956)
@@ -0,0 +1,108 @@
+/*
+    BoolParser.h - Boolean expression parser and syntax tree builder
+
+    boolstuff - Disjunctive Normal Form boolean expression library
+    Copyright (C) 2002-2005 Pierre Sarrazin <http://sarrazip.com/>
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+    as published by the Free Software Foundation; either version 2
+    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, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+    02111-1307, USA.
+*/
+
+#ifndef _games_boolparser_h
+#define _games_boolparser_h
+
+#include <boolstuff/BoolExpr.h>
+
+#include <string>
+
+/**
+    Parser for a language of boolean expressions.
+    The parse() method dynamically allocates a binary tree of nodes that
+    represents the syntactic structure of a textual boolean expression.
+*/
+class BoolParser
+{
+public:
+
+    /**  Error descriptor. */
+    class Error
+    {
+    public:
+        /** Possible error codes returned by the parser. */
+        enum Code
+        {
+            GARBAGE_AT_END,
+            RUNAWAY_PARENTHESIS,
+            STRING_EXPECTED
+        };
+
+        /** Index (>=0) in the input string where the error was detected. */
+        size_t index;
+        /** Code that gives the type of the error */
+        Code code;
+
+        /**
+            Initializes an error object with the given index and error.
+        */
+        Error(size_t i, Code c) : index(i), code(c) {}
+    };
+
+
+    /**
+        Initializes the parser.
+    */
+    BoolParser();
+
+    /**
+        Destroys the parser and frees the associated resources.
+    */
+    ~BoolParser();
+
+    /**
+        Parses a textual boolean expression and creates a binary syntax tree.
+        Dynamically allocates a tree of nodes that represents the
+        syntactic structure of 'expr'.
+        The returned tree must eventually be destroyed with operator delete.
+
+        @param	expr	text of the boolean expression to parse
+        @returns	the root of the created tree
+        @throws	Error	describes a parsing error
+    */
+    boolstuff::BoolExpr<std::string> *parse(const std::string &expr) throw(Error);
+
+private:
+
+    std::string curInput;
+    size_t curIndex;
+
+    // Implementation methods:
+    boolstuff::BoolExpr<std::string> *parseExpr() throw(Error);
+    boolstuff::BoolExpr<std::string> *parseTerm() throw(Error);
+    boolstuff::BoolExpr<std::string> *parseFactor() throw(Error);
+    boolstuff::BoolExpr<std::string> *parseAtom() throw(Error);
+    boolstuff::BoolExpr<std::string> *parseString() throw(Error);
+
+    bool atEnd();
+    bool tokenSeen(const char *s);
+    void skipToken(const char *s);
+    void skipSpaces();
+    bool isStringChar(char c) const;
+
+    // Forbidden operations:
+    BoolParser(const BoolParser &);
+    BoolParser &operator = (const BoolParser &);
+};
+
+#endif  /* _games_boolparser_h */




More information about the Pkg-games-commits mailing list