[Xorp-hackers] [PATCH 02/15] xorp: policy:backend: Rename backend.y to backend.yy
igorm at etf.rs
igorm at etf.rs
Fri Aug 31 04:33:48 PDT 2012
From: Igor Maravic <igorm at etf.rs>
Signed-off-by: Igor Maravic <igorm at etf.rs>
---
xorp/policy/backend/backend.y | 183 ----------------------------------------
xorp/policy/backend/backend.yy | 183 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 183 insertions(+), 183 deletions(-)
delete mode 100644 xorp/policy/backend/backend.y
create mode 100644 xorp/policy/backend/backend.yy
diff --git a/xorp/policy/backend/backend.y b/xorp/policy/backend/backend.y
deleted file mode 100644
index c282906..0000000
--- a/xorp/policy/backend/backend.y
+++ /dev/null
@@ -1,183 +0,0 @@
-%{
-/*
- * yacc -d -p yy_policy_backend_parser -o yacc.yy_policy_backend_parser.cc backend.y
- */
-
-#include <vector>
-
-#include "libxorp/xorp.h"
-#include "policy/common/varrw.hh"
-#include "policy/common/element_factory.hh"
-#include "policy/common/operator.hh"
-#include "policy_backend_parser.hh"
-#include "instruction.hh"
-#include "term_instr.hh"
-#include "policy_instr.hh"
-
-extern int yylex(void);
-extern void yyerror(const char*);
-
-using namespace policy_backend_parser;
-
-static ElementFactory _ef;
-
-%}
-
-%union {
- char* c_str;
- PolicyInstr* c_pi;
-};
-
-%token <c_str> YY_ARG
-%token YY_NEWLINE YY_BLANK
-%token YY_POLICY_START YY_POLICY_END YY_TERM_START YY_TERM_END
-%token YY_PUSH YY_PUSH_SET
-%token YY_EQ YY_NE YY_LT YY_GT YY_LE YY_GE
-%token YY_NOT YY_AND YY_OR YY_XOR YY_HEAD YY_CTR YY_NE_INT
-%token YY_ADD YY_SUB YY_MUL
-%token YY_ONFALSE_EXIT
-%token YY_REGEX
-%token YY_LOAD YY_STORE
-%token YY_ACCEPT YY_REJECT
-%token YY_SET YY_NEXT YY_POLICY YY_SUBR_START YY_SUBR_END YY_TERM
-
-%type <c_pi> policy
-%%
-
-program:
- program policy { _yy_policies->push_back($2); }
- | program subroutine
- | program set
- | /* empty */
- ;
-
-set:
- YY_SET YY_ARG YY_ARG YY_ARG YY_NEWLINE
- {
- // XXX: doesn't delete old
- (*_yy_sets)[$3] = _ef.create($2, $4);
- free($2); free($3); free($4);
- }
- ;
-
-subroutine:
- YY_SUBR_START YY_NEWLINE policies YY_SUBR_END YY_NEWLINE
- ;
-
-policies:
- policies policy { (*_yy_subr)[$2->name()] = $2; }
- | /* empty */
- ;
-
-policy: YY_POLICY_START YY_ARG YY_NEWLINE terms YY_POLICY_END YY_NEWLINE
- {
- PolicyInstr* pi = new PolicyInstr($2,_yy_terms);
-
- pi->set_trace(_yy_trace);
- _yy_trace = false;
-
- _yy_terms = new vector<TermInstr*>();
-
- free($2);
-
- $$ = pi;
- }
- ;
-
-terms:
- terms YY_TERM_START YY_ARG YY_NEWLINE statements YY_TERM_END YY_NEWLINE {
-
- TermInstr* ti = new TermInstr($3,_yy_instructions);
- _yy_instructions = new vector<Instruction*>();
- _yy_terms->push_back(ti);
- free($3);
- }
- | /* empty */
- ;
-
-statements:
- statements statement YY_NEWLINE
- | /* empty */
- ;
-
-
-statement:
- YY_PUSH YY_ARG YY_ARG {
- Instruction* i = new Push(_ef.create($2,$3));
- _yy_instructions->push_back(i);
- free($2); free($3);
- }
- | YY_PUSH_SET YY_ARG {
- _yy_instructions->push_back(new PushSet($2));
- free($2);
- }
-
- | YY_ONFALSE_EXIT {
- _yy_instructions->push_back(new OnFalseExit());
- }
-
- | YY_LOAD YY_ARG {
- char* err = NULL;
- bool is_error = false;
- VarRW::Id id = strtoul($2, &err, 10);
- if ((err != NULL) && (*err != '\0'))
- is_error = true;
- free($2);
- if (is_error) {
- yyerror("Need numeric var ID");
- YYERROR;
- }
- _yy_instructions->push_back(new Load(id));
- }
-
- | YY_STORE YY_ARG {
- char* err = NULL;
- bool is_error = false;
- VarRW::Id id = strtoul($2, &err, 10);
-
- if ((err != NULL) && (*err != '\0'))
- is_error = true;
-
- free($2);
-
- if (is_error) {
- yyerror("Need numeric var ID");
- YYERROR;
- }
-
- if (id == VarRW::VAR_TRACE)
- _yy_trace = true;
-
- _yy_instructions->push_back(new Store(id));
- }
-
- | YY_ACCEPT { _yy_instructions->push_back(new Accept()); }
- | YY_REJECT { _yy_instructions->push_back(new Reject()); }
-
- | YY_EQ { _yy_instructions->push_back(new NaryInstr(new OpEq)); }
- | YY_NE { _yy_instructions->push_back(new NaryInstr(new OpNe)); }
- | YY_LT { _yy_instructions->push_back(new NaryInstr(new OpLt)); }
- | YY_GT { _yy_instructions->push_back(new NaryInstr(new OpGt)); }
- | YY_LE { _yy_instructions->push_back(new NaryInstr(new OpLe)); }
- | YY_GE { _yy_instructions->push_back(new NaryInstr(new OpGe)); }
-
- | YY_NOT { _yy_instructions->push_back(new NaryInstr(new OpNot)); }
- | YY_AND { _yy_instructions->push_back(new NaryInstr(new OpAnd)); }
- | YY_XOR { _yy_instructions->push_back(new NaryInstr(new OpXor)); }
- | YY_OR { _yy_instructions->push_back(new NaryInstr(new OpOr)); }
-
- | YY_ADD { _yy_instructions->push_back(new NaryInstr(new OpAdd)); }
- | YY_SUB { _yy_instructions->push_back(new NaryInstr(new OpSub)); }
- | YY_MUL { _yy_instructions->push_back(new NaryInstr(new OpMul)); }
- | YY_HEAD { _yy_instructions->push_back(new NaryInstr(new OpHead));}
- | YY_CTR { _yy_instructions->push_back(new NaryInstr(new OpCtr));}
- | YY_NE_INT { _yy_instructions->push_back(new NaryInstr(new OpNEInt));}
- | YY_REGEX { _yy_instructions->push_back(new NaryInstr(new OpRegex));}
- | YY_NEXT YY_POLICY
- { _yy_instructions->push_back(new Next(Next::POLICY)); }
- | YY_NEXT YY_TERM
- { _yy_instructions->push_back(new Next(Next::TERM)); }
- | YY_POLICY YY_ARG
- { _yy_instructions->push_back(new Subr($2)); free($2); }
- ;
-%%
diff --git a/xorp/policy/backend/backend.yy b/xorp/policy/backend/backend.yy
new file mode 100644
index 0000000..844e81e
--- /dev/null
+++ b/xorp/policy/backend/backend.yy
@@ -0,0 +1,183 @@
+%{
+/*
+ * yacc -d -p yy_policy_backend_parser -o yacc.yy_policy_backend_parser.cc backend.y
+ */
+
+#include <vector>
+
+#include "libxorp/xorp.h"
+#include "policy/common/varrw.hh"
+#include "policy/common/element_factory.hh"
+#include "policy/common/operator.hh"
+#include "policy/backend/policy_backend_parser.hh"
+#include "policy/backend/instruction.hh"
+#include "policy/backend/term_instr.hh"
+#include "policy/backend/policy_instr.hh"
+
+extern int yylex(void);
+extern void yyerror(const char*);
+
+using namespace policy_backend_parser;
+
+static ElementFactory _ef;
+
+%}
+
+%union {
+ char* c_str;
+ PolicyInstr* c_pi;
+};
+
+%token <c_str> YY_ARG
+%token YY_NEWLINE YY_BLANK
+%token YY_POLICY_START YY_POLICY_END YY_TERM_START YY_TERM_END
+%token YY_PUSH YY_PUSH_SET
+%token YY_EQ YY_NE YY_LT YY_GT YY_LE YY_GE
+%token YY_NOT YY_AND YY_OR YY_XOR YY_HEAD YY_CTR YY_NE_INT
+%token YY_ADD YY_SUB YY_MUL
+%token YY_ONFALSE_EXIT
+%token YY_REGEX
+%token YY_LOAD YY_STORE
+%token YY_ACCEPT YY_REJECT
+%token YY_SET YY_NEXT YY_POLICY YY_SUBR_START YY_SUBR_END YY_TERM
+
+%type <c_pi> policy
+%%
+
+program:
+ program policy { _yy_policies->push_back($2); }
+ | program subroutine
+ | program set
+ | /* empty */
+ ;
+
+set:
+ YY_SET YY_ARG YY_ARG YY_ARG YY_NEWLINE
+ {
+ // XXX: doesn't delete old
+ (*_yy_sets)[$3] = _ef.create($2, $4);
+ free($2); free($3); free($4);
+ }
+ ;
+
+subroutine:
+ YY_SUBR_START YY_NEWLINE policies YY_SUBR_END YY_NEWLINE
+ ;
+
+policies:
+ policies policy { (*_yy_subr)[$2->name()] = $2; }
+ | /* empty */
+ ;
+
+policy: YY_POLICY_START YY_ARG YY_NEWLINE terms YY_POLICY_END YY_NEWLINE
+ {
+ PolicyInstr* pi = new PolicyInstr($2,_yy_terms);
+
+ pi->set_trace(_yy_trace);
+ _yy_trace = false;
+
+ _yy_terms = new vector<TermInstr*>();
+
+ free($2);
+
+ $$ = pi;
+ }
+ ;
+
+terms:
+ terms YY_TERM_START YY_ARG YY_NEWLINE statements YY_TERM_END YY_NEWLINE {
+
+ TermInstr* ti = new TermInstr($3,_yy_instructions);
+ _yy_instructions = new vector<Instruction*>();
+ _yy_terms->push_back(ti);
+ free($3);
+ }
+ | /* empty */
+ ;
+
+statements:
+ statements statement YY_NEWLINE
+ | /* empty */
+ ;
+
+
+statement:
+ YY_PUSH YY_ARG YY_ARG {
+ Instruction* i = new Push(_ef.create($2,$3));
+ _yy_instructions->push_back(i);
+ free($2); free($3);
+ }
+ | YY_PUSH_SET YY_ARG {
+ _yy_instructions->push_back(new PushSet($2));
+ free($2);
+ }
+
+ | YY_ONFALSE_EXIT {
+ _yy_instructions->push_back(new OnFalseExit());
+ }
+
+ | YY_LOAD YY_ARG {
+ char* err = NULL;
+ bool is_error = false;
+ VarRW::Id id = strtoul($2, &err, 10);
+ if ((err != NULL) && (*err != '\0'))
+ is_error = true;
+ free($2);
+ if (is_error) {
+ yyerror("Need numeric var ID");
+ YYERROR;
+ }
+ _yy_instructions->push_back(new Load(id));
+ }
+
+ | YY_STORE YY_ARG {
+ char* err = NULL;
+ bool is_error = false;
+ VarRW::Id id = strtoul($2, &err, 10);
+
+ if ((err != NULL) && (*err != '\0'))
+ is_error = true;
+
+ free($2);
+
+ if (is_error) {
+ yyerror("Need numeric var ID");
+ YYERROR;
+ }
+
+ if (id == VarRW::VAR_TRACE)
+ _yy_trace = true;
+
+ _yy_instructions->push_back(new Store(id));
+ }
+
+ | YY_ACCEPT { _yy_instructions->push_back(new Accept()); }
+ | YY_REJECT { _yy_instructions->push_back(new Reject()); }
+
+ | YY_EQ { _yy_instructions->push_back(new NaryInstr(new OpEq)); }
+ | YY_NE { _yy_instructions->push_back(new NaryInstr(new OpNe)); }
+ | YY_LT { _yy_instructions->push_back(new NaryInstr(new OpLt)); }
+ | YY_GT { _yy_instructions->push_back(new NaryInstr(new OpGt)); }
+ | YY_LE { _yy_instructions->push_back(new NaryInstr(new OpLe)); }
+ | YY_GE { _yy_instructions->push_back(new NaryInstr(new OpGe)); }
+
+ | YY_NOT { _yy_instructions->push_back(new NaryInstr(new OpNot)); }
+ | YY_AND { _yy_instructions->push_back(new NaryInstr(new OpAnd)); }
+ | YY_XOR { _yy_instructions->push_back(new NaryInstr(new OpXor)); }
+ | YY_OR { _yy_instructions->push_back(new NaryInstr(new OpOr)); }
+
+ | YY_ADD { _yy_instructions->push_back(new NaryInstr(new OpAdd)); }
+ | YY_SUB { _yy_instructions->push_back(new NaryInstr(new OpSub)); }
+ | YY_MUL { _yy_instructions->push_back(new NaryInstr(new OpMul)); }
+ | YY_HEAD { _yy_instructions->push_back(new NaryInstr(new OpHead));}
+ | YY_CTR { _yy_instructions->push_back(new NaryInstr(new OpCtr));}
+ | YY_NE_INT { _yy_instructions->push_back(new NaryInstr(new OpNEInt));}
+ | YY_REGEX { _yy_instructions->push_back(new NaryInstr(new OpRegex));}
+ | YY_NEXT YY_POLICY
+ { _yy_instructions->push_back(new Next(Next::POLICY)); }
+ | YY_NEXT YY_TERM
+ { _yy_instructions->push_back(new Next(Next::TERM)); }
+ | YY_POLICY YY_ARG
+ { _yy_instructions->push_back(new Subr($2)); free($2); }
+ ;
+%%
--
1.7.9.5
More information about the Xorp-hackers
mailing list