2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-30 21:45:37 +00:00

[4088] Classes renamed to Kea nomenclature

This commit is contained in:
Tomek Mrugalski
2015-10-28 20:37:12 +01:00
parent 28413e8258
commit fe5ec7722c
4 changed files with 58 additions and 45 deletions

View File

@@ -1,38 +1,51 @@
#line 11104 "./doc/bison.texi"
#include "eval_context.h"
#include "parser.h"
calcxx_driver::calcxx_driver ()
#include <fstream>
EvalContext::EvalContext ()
: trace_scanning (false), trace_parsing (false)
{
variables["one"] = 1;
variables["two"] = 2;
}
calcxx_driver::~calcxx_driver ()
EvalContext::~EvalContext ()
{
}
int
calcxx_driver::parse (const std::string &f)
EvalContext::parseFile(const std::string &filename)
{
file = f;
scan_begin ();
yy::calcxx_parser parser (*this);
parser.set_debug_level (trace_parsing);
int res = parser.parse ();
scan_end ();
return res;
file = filename;
scan_begin();
yy::EvalParser parser (*this);
parser.set_debug_level(trace_parsing);
int res = parser.parse();
scan_end();
return res;
}
int
EvalContext::parseString(const std::string& str)
{
remove("/tmp/eval");
std::fstream f("/tmp/eval", std::ios::trunc);
f << str;
f.close();
return (parseFile("/tmp/eval"));
}
void
calcxx_driver::error (const yy::location& l, const std::string& m)
EvalContext::error (const yy::location& l, const std::string& m)
{
std::cerr << l << ": " << m << std::endl;
}
void
calcxx_driver::error (const std::string& m)
EvalContext::error (const std::string& m)
{
std::cerr << m << std::endl;
}

View File

@@ -1,22 +1,22 @@
#ifndef CALCXX_DRIVER_HH
# define CALCXX_DRIVER_HH
#ifndef EVAL_CONTEXT_H
#define EVAL_CONTEXT_H
# include <string>
# include <map>
# include "parser.h"
// Tell Flex the lexer's prototype ...
# define YY_DECL \
yy::calcxx_parser::symbol_type yylex (calcxx_driver& driver)
yy::EvalParser::symbol_type yylex (EvalContext& driver)
// ... and declare it for the parser's sake.
YY_DECL;
// Conducting the whole scanning and parsing of Calc++.
class calcxx_driver
class EvalContext
{
public:
calcxx_driver ();
virtual ~calcxx_driver ();
EvalContext ();
virtual ~EvalContext ();
std::map<std::string, int> variables;
@@ -29,7 +29,9 @@ public:
// Run the parser on file F.
// Return 0 on success.
int parse (const std::string& f);
int parseFile(const std::string& filename);
int parseString(const std::string& str);
// The name of the file being parsed.
// Used later to pass the file name to the location tracker.
@@ -42,4 +44,4 @@ public:
void error (const yy::location& l, const std::string& m);
void error (const std::string& m);
};
#endif // ! CALCXX_DRIVER_HH
#endif // ! EVALCONTEXT_HH

View File

@@ -22,26 +22,26 @@ int [0-9]+
blank [ \t]
%{
// Code run each time a pattern is matched.
# define YY_USER_ACTION loc.columns (yyleng);
// Code run each time a pattern is matched.
#define YY_USER_ACTION loc.columns(yyleng);
%}
%%
%{
// Code run each time yylex is called.
loc.step ();
// Code run each time yylex is called.
loc.step();
%}
{blank}+ loc.step ();
[\n]+ loc.lines (yyleng); loc.step ();
"-" return yy::calcxx_parser::make_MINUS(loc);
"+" return yy::calcxx_parser::make_PLUS(loc);
"*" return yy::calcxx_parser::make_STAR(loc);
"/" return yy::calcxx_parser::make_SLASH(loc);
"(" return yy::calcxx_parser::make_LPAREN(loc);
")" return yy::calcxx_parser::make_RPAREN(loc);
":=" return yy::calcxx_parser::make_ASSIGN(loc);
"-" return yy::EvalParser::make_MINUS(loc);
"+" return yy::EvalParser::make_PLUS(loc);
"*" return yy::EvalParser::make_STAR(loc);
"/" return yy::EvalParser::make_SLASH(loc);
"(" return yy::EvalParser::make_LPAREN(loc);
")" return yy::EvalParser::make_RPAREN(loc);
":=" return yy::EvalParser::make_ASSIGN(loc);
{int} {
@@ -49,31 +49,29 @@ blank [ \t]
long n = strtol (yytext, NULL, 10);
if (! (INT_MIN <= n && n <= INT_MAX && errno != ERANGE))
driver.error (loc, "integer is out of range");
return yy::calcxx_parser::make_NUMBER(n, loc);
return yy::EvalParser::make_NUMBER(n, loc);
}
{id} return yy::calcxx_parser::make_IDENTIFIER(yytext, loc);
{id} return yy::EvalParser::make_IDENTIFIER(yytext, loc);
. driver.error (loc, "invalid character");
<<EOF>> return yy::calcxx_parser::make_END(loc);
<<EOF>> return yy::EvalParser::make_END(loc);
%%
void
calcxx_driver::scan_begin ()
EvalContext::scan_begin()
{
yy_flex_debug = trace_scanning;
if (file.empty () || file == "-")
yyin = stdin;
else if (!(yyin = fopen (file.c_str (), "r")))
else if (!(yyin = fopen(file.c_str (), "r")))
{
error ("cannot open " + file + ": " + strerror(errno));
exit (EXIT_FAILURE);
}
}
void
calcxx_driver::scan_end ()
EvalContext::scan_end()
{
fclose (yyin);
}

View File

@@ -1,17 +1,17 @@
%skeleton "lalr1.cc" /* -*- C++ -*- */
%require "3.0.2"
%defines
%define parser_class_name {calcxx_parser}
%define parser_class_name {EvalParser}
%define api.token.constructor
%define api.value.type variant
%define parse.assert
%code requires
{
# include <string>
class calcxx_driver;
class EvalContext;
}
// The parsing context.
%param { calcxx_driver& driver }
%param { EvalContext& driver }
%locations
%initial-action
{
@@ -62,8 +62,8 @@ exp:
| "number" { std::swap ($$, $1); };
%%
void
yy::calcxx_parser::error (const location_type& l,
const std::string& m)
yy::EvalParser::error(const location_type& l,
const std::string& m)
{
driver.error (l, m);
}