[Xorp-hackers] [PATCH 03/15] xorp:policy:backend: Rename backend.l to backend.ll
igorm at etf.rs
igorm at etf.rs
Fri Aug 31 04:33:49 PDT 2012
From: Igor Maravic <igorm at etf.rs>
Signed-off-by: Igor Maravic <igorm at etf.rs>
---
xorp/policy/backend/backend.l | 153 --------------------------------------
xorp/policy/backend/backend.ll | 159 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 159 insertions(+), 153 deletions(-)
delete mode 100644 xorp/policy/backend/backend.l
create mode 100644 xorp/policy/backend/backend.ll
diff --git a/xorp/policy/backend/backend.l b/xorp/policy/backend/backend.l
deleted file mode 100644
index 124f6c5..0000000
--- a/xorp/policy/backend/backend.l
+++ /dev/null
@@ -1,153 +0,0 @@
-%{
-
-#include <assert.h>
-#include <sstream>
-
-#include "libxorp/xorp.h"
-#include "policy/common/policy_utils.hh"
-#include "policy_backend_parser.hh"
-#include "yacc.yy_policy_backend_parser.cc.h"
-
-#define yyparse yy_policy_backend_parserparse
-#define yyerror yy_policy_backend_parsererror
-#define yylval yy_policy_backend_parserlval
-
-using namespace policy_utils;
-using namespace policy_backend_parser;
-
-void yyerror(const char*);
-int yyparse(void);
-
-vector<PolicyInstr*>* policy_backend_parser::_yy_policies;
-map<string,Element*>* policy_backend_parser::_yy_sets;
-vector<TermInstr*>* policy_backend_parser::_yy_terms;
-vector<Instruction*>* policy_backend_parser::_yy_instructions;
-bool policy_backend_parser::_yy_trace;
-SUBR* policy_backend_parser::_yy_subr;
-
-namespace {
- string _last_error;
- unsigned _parser_lineno;
-}
-
-%}
-%option noyywrap
-%option nounput
-%option prefix="yy_policy_backend_parser"
-%option outfile="lex.yy_policy_backend_parser.cc"
-%option never-interactive
-%x STR
-%%
-
-"POLICY_START" { return YY_POLICY_START; }
-"POLICY_END" { return YY_POLICY_END; }
-"TERM_START" { return YY_TERM_START; }
-"TERM_END" { return YY_TERM_END; }
-"SET" { return YY_SET; }
-"PUSH" { return YY_PUSH; }
-"PUSH_SET" { return YY_PUSH_SET; }
-"REGEX" { return YY_REGEX; }
-"LOAD" { return YY_LOAD; }
-"STORE" { return YY_STORE; }
-"ACCEPT" { return YY_ACCEPT; }
-"REJECT" { return YY_REJECT; }
-"NOT" { return YY_NOT; }
-"AND" { return YY_AND; }
-"XOR" { return YY_XOR; }
-"OR" { return YY_OR; }
-"HEAD" { return YY_HEAD; }
-"CTR" { return YY_CTR; }
-"ONFALSE_EXIT" { return YY_ONFALSE_EXIT; }
-"NON_EMPTY_INTERSECTION" { return YY_NE_INT; }
-"NEXT" { return YY_NEXT; }
-"POLICY" { return YY_POLICY; }
-"TERM" { return YY_TERM; }
-"SUBR_START" { return YY_SUBR_START; }
-"SUBR_END" { return YY_SUBR_END; }
-
-"==" { return YY_EQ; }
-"!=" { return YY_NE; }
-"<" { return YY_LT; }
-">" { return YY_GT; }
-"<=" { return YY_LE; }
-">=" { return YY_GE; }
-"+" { return YY_ADD; }
-"\-" { return YY_SUB; }
-"*" { return YY_MUL; }
-
-"\n" { _parser_lineno++; return YY_NEWLINE; }
-
-[[:blank:]]+ /* eat blanks */
-
-[^\"[:blank:]\n]+ {
- yylval.c_str = strdup(yytext);
- return YY_ARG;
- }
-
-\" BEGIN(STR);
-
-<STR>\" BEGIN(INITIAL);
-
-<STR>[^\"]+ { yylval.c_str = strdup(yytext);
- _parser_lineno += count_nl(yytext);
- return YY_ARG;
- }
-
-%%
-
-void yyerror(const char *m)
-{
- ostringstream oss;
-
- oss << "Error on line " << _parser_lineno << " near (";
- for(int i = 0; i < yyleng; i++)
- oss << yytext[i];
- oss << "): " << m;
-
- _last_error = oss.str();
-}
-
-int
-policy_backend_parser::policy_backend_parse(vector<PolicyInstr*>& outpolicies,
- map<string,Element*>& outsets,
- SUBR& subr,
- const string& conf,
- string& outerr)
-{
-
- YY_BUFFER_STATE yybuffstate = yy_scan_string(conf.c_str());
-
- _last_error = "No error";
- _parser_lineno = 1;
-
- _yy_policies = &outpolicies;
- _yy_sets = &outsets;
- _yy_subr = &subr;
- _yy_terms = new vector<TermInstr*>();
- _yy_instructions = new vector<Instruction*>();
- _yy_trace = false;
-
- int res = yyparse();
-
- yy_delete_buffer(yybuffstate);
- outerr = _last_error;
-
- // parse error
- if (res) {
- // get rid of temporary parse object not yet bound to policies
- delete_vector(_yy_terms);
- delete_vector(_yy_instructions);
- }
- // good parse
- else {
- // all terms should be bound to policies
- assert(_yy_terms->empty());
- delete _yy_terms;
-
- // all instructions should be bound to terms
- assert(_yy_instructions->empty());
- delete _yy_instructions;
- }
-
- return res;
-}
diff --git a/xorp/policy/backend/backend.ll b/xorp/policy/backend/backend.ll
new file mode 100644
index 0000000..a874ec2
--- /dev/null
+++ b/xorp/policy/backend/backend.ll
@@ -0,0 +1,159 @@
+%{
+
+#include <assert.h>
+#include <sstream>
+
+#include "libxorp/xorp.h"
+#include "policy/common/policy_utils.hh"
+#include "policy/backend/policy_backend_parser.hh"
+
+#if defined(NEED_LEX_H_HACK)
+extern YYSTYPE tpltlval;
+#include "y.policy_backend_parser_tab.cc.h"
+#else
+#include "y.policy_backend_parser_tab.hh"
+#endif
+
+#define yyparse policy_backend_parserparse
+#define yyerror policy_backend_parsererror
+#define yylval policy_backend_parserlval
+
+using namespace policy_utils;
+using namespace policy_backend_parser;
+
+void yyerror(const char*);
+int yyparse(void);
+
+vector<PolicyInstr*>* policy_backend_parser::_yy_policies;
+map<string,Element*>* policy_backend_parser::_yy_sets;
+vector<TermInstr*>* policy_backend_parser::_yy_terms;
+vector<Instruction*>* policy_backend_parser::_yy_instructions;
+bool policy_backend_parser::_yy_trace;
+SUBR* policy_backend_parser::_yy_subr;
+
+namespace {
+ string _last_error;
+ unsigned _parser_lineno;
+}
+
+%}
+%option noyywrap
+%option nounput
+%option prefix="policy_backend_parser"
+%option outfile="lex.policy_backend_parser.cc"
+%option never-interactive
+%x STR
+%%
+
+"POLICY_START" { return YY_POLICY_START; }
+"POLICY_END" { return YY_POLICY_END; }
+"TERM_START" { return YY_TERM_START; }
+"TERM_END" { return YY_TERM_END; }
+"SET" { return YY_SET; }
+"PUSH" { return YY_PUSH; }
+"PUSH_SET" { return YY_PUSH_SET; }
+"REGEX" { return YY_REGEX; }
+"LOAD" { return YY_LOAD; }
+"STORE" { return YY_STORE; }
+"ACCEPT" { return YY_ACCEPT; }
+"REJECT" { return YY_REJECT; }
+"NOT" { return YY_NOT; }
+"AND" { return YY_AND; }
+"XOR" { return YY_XOR; }
+"OR" { return YY_OR; }
+"HEAD" { return YY_HEAD; }
+"CTR" { return YY_CTR; }
+"ONFALSE_EXIT" { return YY_ONFALSE_EXIT; }
+"NON_EMPTY_INTERSECTION" { return YY_NE_INT; }
+"NEXT" { return YY_NEXT; }
+"POLICY" { return YY_POLICY; }
+"TERM" { return YY_TERM; }
+"SUBR_START" { return YY_SUBR_START; }
+"SUBR_END" { return YY_SUBR_END; }
+
+"==" { return YY_EQ; }
+"!=" { return YY_NE; }
+"<" { return YY_LT; }
+">" { return YY_GT; }
+"<=" { return YY_LE; }
+">=" { return YY_GE; }
+"+" { return YY_ADD; }
+"\-" { return YY_SUB; }
+"*" { return YY_MUL; }
+
+"\n" { _parser_lineno++; return YY_NEWLINE; }
+
+[[:blank:]]+ /* eat blanks */
+
+[^\"[:blank:]\n]+ {
+ yylval.c_str = strdup(yytext);
+ return YY_ARG;
+ }
+
+\" BEGIN(STR);
+
+<STR>\" BEGIN(INITIAL);
+
+<STR>[^\"]+ { yylval.c_str = strdup(yytext);
+ _parser_lineno += count_nl(yytext);
+ return YY_ARG;
+ }
+
+%%
+
+void yyerror(const char *m)
+{
+ ostringstream oss;
+
+ oss << "Error on line " << _parser_lineno << " near (";
+ for(int i = 0; i < yyleng; i++)
+ oss << yytext[i];
+ oss << "): " << m;
+
+ _last_error = oss.str();
+}
+
+int
+policy_backend_parser::policy_backend_parse(vector<PolicyInstr*>& outpolicies,
+ map<string,Element*>& outsets,
+ SUBR& subr,
+ const string& conf,
+ string& outerr)
+{
+
+ YY_BUFFER_STATE yybuffstate = yy_scan_string(conf.c_str());
+
+ _last_error = "No error";
+ _parser_lineno = 1;
+
+ _yy_policies = &outpolicies;
+ _yy_sets = &outsets;
+ _yy_subr = &subr;
+ _yy_terms = new vector<TermInstr*>();
+ _yy_instructions = new vector<Instruction*>();
+ _yy_trace = false;
+
+ int res = yyparse();
+
+ yy_delete_buffer(yybuffstate);
+ outerr = _last_error;
+
+ // parse error
+ if (res) {
+ // get rid of temporary parse object not yet bound to policies
+ delete_vector(_yy_terms);
+ delete_vector(_yy_instructions);
+ }
+ // good parse
+ else {
+ // all terms should be bound to policies
+ assert(_yy_terms->empty());
+ delete _yy_terms;
+
+ // all instructions should be bound to terms
+ assert(_yy_instructions->empty());
+ delete _yy_instructions;
+ }
+
+ return res;
+}
--
1.7.9.5
More information about the Xorp-hackers
mailing list