1 /* 2 * Copyright (c) 2015-2017, Intel Corporation 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are met: 6 * 7 * * Redistributions of source code must retain the above copyright notice, 8 * this list of conditions and the following disclaimer. 9 * * Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * * Neither the name of Intel Corporation nor the names of its contributors 13 * may be used to endorse or promote products derived from this software 14 * without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 /** \file 30 * \brief Interface to Parser. 31 */ 32 33 #ifndef _RE_PARSER_H_ 34 #define _RE_PARSER_H_ 35 36 #include "ue2common.h" 37 38 #include <memory> 39 40 namespace ue2 { 41 42 class Component; 43 44 /** \brief Represents the current "mode flags" at any point in the parsing 45 * process. 46 * 47 * This is necessary as some modes can be changed part-way through an 48 * expression, such as in: 49 * 50 * /foo(?i)bar/ 51 */ 52 struct ParseMode { ParseModeParseMode53 ParseMode() {} 54 explicit ParseMode(u32 hs_flags); 55 56 bool caseless = false; 57 bool dotall = false; 58 bool ignore_space = false; 59 bool multiline = false; 60 bool ucp = false; 61 bool utf8 = false; 62 }; 63 64 /** \brief Parse the given regular expression into a \ref Component tree. 65 * 66 * The \a mode parameter should contain the initial mode flags, and will be 67 * updated by the parser if additional global flags are introduced in the 68 * expression (for example, via "(*UTF8)".) 69 * 70 * This call will throw a ParseError on failure. 71 */ 72 std::unique_ptr<Component> parse(const char *ptr, ParseMode &mode); 73 74 } // namespace ue2 75 76 #endif // _RE_PARSER_H_ 77