classification, but in the future may be also used for other applications.
The external interface to the library is the @ref isc::eval::EvalContext
- class. Once instantiated, it offers two major methods:
- @ref isc::eval::EvalContext::parseFile which parses the content of a file
- and @ref isc::eval::EvalContext::parseString, which parses the specified
+ class. Once instantiated, it offers a major method:
+ @ref isc::eval::EvalContext::parseString, which parses the specified
string. Once the expression is parsed, it is converted to a collection of
tokens that are stored in Reverse Polish Notation in
EvalContext::expression.
{
}
-bool
-EvalContext::parseFile(const std::string &filename)
-{
- file_ = filename;
- scanFileBegin();
- isc::eval::EvalParser parser(*this);
- parser.set_debug_level(trace_parsing_);
- int res = parser.parse();
- scanFileEnd();
- return (res == 0);
-}
-
bool
EvalContext::parseString(const std::string& str)
{
/// @brief Parsed expression (output tokens are stored here)
isc::dhcp::Expression expression;
- /// @brief Method called before scanning starts on a file.
- void scanFileBegin();
-
- /// @brief Method called after the last tokens are scanned from a file.
- void scanFileEnd();
-
/// @brief Method called before scanning starts on a string.
void scanStringBegin();
/// @brief Method called after the last tokens are scanned from a string.
void scanStringEnd();
- /// @brief Runs the parser on specified file.
- ///
- /// @param filename
- /// @return true on success.
- bool parseFile(const std::string& filename);
-
/// @brief Run the parser on the string specified.
///
/// @param str string to be written
using namespace isc::eval;
-void
-EvalContext::scanFileBegin()
-{
- loc.initialize(&file_);
- yy_flex_debug = trace_scanning_;
- if (file_.empty () || file_ == "-") {
- yyin = stdin;
- }
- else if (!(yyin = fopen(file_.c_str (), "r"))) {
- error("cannot open " + file_ + ": " + strerror(errno));
- exit(EXIT_FAILURE);
- }
-}
-
-void
-EvalContext::scanFileEnd()
-{
- fclose(yyin);
-}
-
void
EvalContext::scanStringBegin()
{
using namespace isc::eval;
-void
-EvalContext::scanFileBegin()
-{
- loc.initialize(&file_);
- yy_flex_debug = trace_scanning_;
- if (file_.empty () || file_ == "-") {
- yyin = stdin;
- }
- else if (!(yyin = fopen(file_.c_str (), "r"))) {
- error("cannot open " + file_ + ": " + strerror(errno));
- exit(EXIT_FAILURE);
- }
-}
-
-void
-EvalContext::scanFileEnd()
-{
- fclose(yyin);
-}
-
void
EvalContext::scanStringBegin()
{