[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