, m_constraints("VIDE")
, m_identifier(NULL)
,m_parameters(NULL)
- ,m_value(NULL)
,m_type(NULL)
- ,m_parent(NULL)
+ ,m_parent(NULL)
,m_marker(marker_type::FL_NONE)
{
m_tag.m_mode = tag_type::TM_DEFAULT;
,m_constraints("VIDE")
,m_identifier(NULL)
,m_parameters(NULL)
- ,m_parent(NULL)
- ,m_value(NULL)
- ,m_type(NULL)
- ,m_marker(marker_type::FL_NONE)
+ ,m_parent(NULL)
+ ,m_type(NULL)
+ ,m_marker(marker_type::FL_NONE)
{
m_marker.m_flags = marker_type::FL_NONE;
m_tag.m_mode = tag_type::TM_DEFAULT;
,m_identifier(NULL)
,m_tag(n.m_tag)
,m_parameters(NULL)
- ,m_value(n.m_value)
,m_type(n.m_type)
,m_uid(n.m_uid)
- ,m_parent(n.m_parent)
+ ,m_parent(n.m_parent)
{
}
,m_constraints("")
,m_identifier(NULL)
,m_parameters(NULL)
- ,m_value(NULL)
,m_type(NULL)
,m_parent(NULL)
,m_marker(marker_type::FL_NONE)
inline void type_id(asn1::type::id t) { m_type_id = t; }
inline type type_id() const {return m_type_id;};
-
- inline asn1::value *value() const { return m_value;};
-
- inline void value(asn1::value *v) {m_value =v;};
// Meta stuff
inline void meta_id(asn1::meta::id m) {m_meta = m;}
node *m_next;
node *m_type; // 2011/05/03 must be deprecated
- asn1::value *m_value; // Should become part of valuetype
node *m_identifier;
asn1::constructed *m_parameters;
asn1::constraint m_constraints;
return reinterpret_cast<objectset *>(type_node());
}
+constraint *
+assignment::get_constraint() const
+{
+ valueset *v = reinterpret_cast<valueset *>(type_node());
+ if (v != nullptr )
+ return v->get_constraint();
+ return nullptr;
+}
+
+
parameter *
assignment::have_parameter(asn1::node *actp,long &idx)
{
// Should replace node with typenode
void set_type(asn1::node *n);
- typenode *get_type() const;
- objectset *get_objectset() const;
+ typenode *get_type() const;
+
+ objectset *get_objectset() const;
+ /// a valueset assignement content is constraints
+ constraint *get_constraint() const;
/**
* node is an act_parameter ...
*/
};
#define ASSIGNMENT(tp,cls,parent) \
+ class cls; \
class cls ## _assignment : public parent \
{\
public:\
{}; \
~cls ## _assignment () {}; \
cls ## _assignment *clone() { return new cls ## _assignment(*this);}; \
+ private: \
+ cls * m_## cls ; \
+ public: \
+ cls * aget_## cls() const {return m_## cls; } \
+ void set_## cls( cls *_v ) { m_## cls = _v ; } ; \
};
#include "asn1_meta.inc"
return reinterpret_cast<typenode *>(type_node());
}
+value *
+classfield_osf::get_value() const
+{
+ asn1::value *v = reinterpret_cast<value *>(type_node());
+ std::cout<<"classfield_osf::get_value "<<typeid(*type_node()).name()<<std::endl;
+ //assert(v!=null);
+ return v;
+}
+
}
, asn1::typeref *t \
, type _t = asn1::type::ASN1_CLASSFIELD_OSF) ; \
typeref *get_typeref() const; \
+ value *get_value() const; \
typenode *get_type() const;
#define ASN1_CLASSFIELD_TYPE(cls,parent,tp) \
return NULL;
}
+asn1::constraint *
+valueset::get_constraint() const
+{
+ if (m_constraints.size() >= 1)
+ {
+ return *(m_constraints.begin());
+ }
+ return NULL;
+}
+
/**
* objectset
*/
m_classref = ref;
}
+
+asn1::constraint *
+objectset::get_constraint() const
+{
+ if (m_constraints.size() >= 1)
+ {
+ return *(m_constraints.begin());
+ }
+ return NULL;
+}
+
+
}
*/
class valuetype : public node
{
+ private:
+ // No copy contructor
+ valuetype(const valuetype &_b) : node(_b) {};
public:
valuetype(asn1::value *_val,meta _m = meta::VALUE);
void value_long(long long l) ;
long long value_long() const ;
- protected:
+ /// New from node
+ inline asn1::value *value() const { return m_value;};
+
+ inline void value(asn1::value *v) {m_value =v;};
+ private:
+ asn1::value *m_value; // Should become part of valuetype
};
/**
* Specific for Rose ....
*/
asn1::typeref *get_typeref();
+ /**
+ * return constraint from value set
+ */
+ asn1::constraint *get_constraint() const;
protected:
};
asn1::typeref *get_classref() const
{ return m_classref; }
+ /**
+ * return constraint from value set
+ */
+ asn1::constraint *get_constraint() const;
protected:
asn1::typeref *m_classref;
DEF_TRAVERSE_ASSIGN(type,{})
DEF_TRAVERSE_ASSIGN(value,{})
DEF_TRAVERSE_ASSIGN(valueset,{
- if ( asn1::value *v = S->value())
+ if ( asn1::constraint *_constraint = S->get_constraint())
{
- traverse_constraint(v->m_constraint);
+ traverse_constraint(_constraint);
}
})
DEF_TRAVERSE_ASSIGN(object,{
DEF_TRAVERSE_TYPE(extensible,{})
DEF_TRAVERSE_TYPE(components_of,{})
DEF_TRAVERSE_TYPE(valueset,{
- if ( asn1::value *v = S->value())
+ if ( asn1::constraint *v = S->get_constraint())
{
- traverse_constraint(v->m_constraint);
+ traverse_constraint(v);
}
})
DEF_TRAVERSE_TYPE(objectset,{
- if ( asn1::value *v = S->value())
+ if ( asn1::constraint *v = S->get_constraint())
{
- traverse_constraint(v->m_constraint);
+ traverse_constraint(v);
}
})
{
if (f)
{
- if ( asn1::value *v = f->value())
+ // f is a node. that contains a value
+ // as node does not contain value anymore. It's either valueset
+ // or object set
+ if ( asn1::constraint *v = dynamic_cast<objectset *>(f)->get_constraint())
{
- traverse_constraint(v->m_constraint);
+ traverse_constraint(v);
+ } else
+ {
+ std::cerr<<"recursive travers : classfield_ofs "<<typeid(*f).name()<<" Not objectset"<<std::endl;
}
}
}
GEN_LOG_DEBUG( "value integer %s\n"
, type->identifier_name().c_str());
os<<"#define "<<type->identifier_cpp_name();
- os<<"\t "<<n->value()->cpp_name()<<"";
+ //os<<"\t "<<n->value()->cpp_name()<<"";
+ os<<"\t "<<dynamic_cast<asn1::value_assignment *>(n)->aget_value()->cpp_name()<<"";
}
break;
case asn1::type::ASN1_REFERENCE:
break;
default:
{
- asn1::value *v = n->value();
+ //asn1::value *v = n->value();
+ asn1::value *v = dynamic_cast<asn1::value_assignment *>(n)->aget_value();
GEN_LOG_DEBUG("default case %s\n",type->identifier_name().c_str());
assert(v != NULL);
switch (v->type)
);
if (v && v->m_node->type_id()() == 0)
{
- asn1::constructed *vn = v->m_node->value()->m_node->as_constructed();
+ //asn1::constructed *vn = v->m_node->value()->m_node->as_constructed();
+ asn1::constructed *vn = dynamic_cast<asn1::valuetype *>(v->m_node)->value()->m_node->as_constructed();
std::cerr<<__FUNCTION__<<" Proccess ftvf because of wrong id ";
std::cerr<<"<"<<v->m_node->cpp_name()<<"> "<<typeid(*(v->m_node)).name()<<std::endl;
assert((vn != NULL) && " VN should be constructed ");
void visit_choice(asn1::choice *type)
{
- asn1::value *val = type->value();
+ //asn1::value *val = type->value();
+ asn1::valuetype *vt = reinterpret_cast<asn1::valuetype *>(type);
+ asn1::value *val = (vt != nullptr)?vt->value():nullptr;
+ std::cout<<"ftvf::visit_choice type is :"<<typeid(*type).name()<<" vt "<<vt<<" val="<<val<<std::endl;
+ assert(val != nullptr);
m_os<<"\t// FTVF CHOICE "<<type->cpp_name()<<" "<<val->cpp_name()<<std::endl;
switch (val->m_node->type_id()())
{
m_os<<"\tenum e"<< m_structName<<" {\n";
for (; it != m_enumerated.end();++it)
{
- asn1::value *num = (*it)->value();
+ asn1::valuetype *vt = dynamic_cast<asn1::valuetype *>(*it);
+ asn1::value *num = (vt == nullptr)?NULL:vt->value();
if (it != m_enumerated.begin() )
m_os<<",\n";
m_os<<"\t\t"<<(*it)->cpp_name()<<" ";
%x snmp_imports
%x snmp
%x snmp_quoted_string
+%x snmp_ignore
/* */
Digits [0-9]+
Char ([^\n\t\"\'\\])
Char_Literal "'"({Char}|\")"'"
String_Literal \"({Char}|"'")*\"
-HString '[0-9A-F \r\r\v\f\n]+'H
+HString '[0-9A-Fa-f \r\r\v\f\n]+'[Hh]
BString '[01 \t\r\v\f\n]+'B
Identifier [a-z][a-zA-Z0-9]*([-][a-zA-Z0-9]+)*
CapitalReference [A-Z][A-Z0-9]*([-][A-Z0-9]+)*
<INITIAL>ABSTRACT-SYNTAX TOK(T_ABSTRACT_SYNTAX)
ALL TOK(T_ALL)
<INITIAL>ANY TOK(T_ANY)
-<INITIAL>APPLICATION TOK(T_APPLICATION)
+<INITIAL,snmp>APPLICATION TOK(T_APPLICATION)
<INITIAL>AUTOMATIC TOK(T_AUTOMATIC)
<INITIAL>BEGIN TOK(T_BEGIN)
<snmp>BITS TOK(T_BITS)
<INITIAL,snmp>{HString} TOK(T_hstring)
<INITIAL,snmp>IA5String TOK(T_IA5String)
<INITIAL,snmp>IDENTIFIER TOK(T_STR_IDENTIFIER)
-<INITIAL>IMPLICIT TOK(T_IMPLICIT)
+<INITIAL,snmp>IMPLICIT TOK(T_IMPLICIT)
<INITIAL>IMPLIED TOK(T_IMPLIED)
IMPORTS {
if (gParser->is_mode_mib())
<INITIAL>PLUS-INFINITY
<INITIAL>PRESENT TOK(T_PRESENT)
<INITIAL>PrintableString TOK(T_PrintableString)
-<INITIAL>PRIVATE
+<INITIAL,snmp>PRIVATE
<INITIAL>REAL TOK(T_REAL)
<INITIAL>RELATIVE-OID TOK(T_RELATIVE_OID)
<INITIAL>RELATIVE-OID-IRI TOK(T_RELATIVE_OID_IRI)
<INITIAL>UNION TOK(T_UNION)
<INITIAL>UNITS TOK(T_UNITS)
<INITIAL>UNIQUE TOK(T_UNIQUE)
-<INITIAL>UNIVERSAL TOK(T_UNIVERSAL)
+<INITIAL,snmp>UNIVERSAL TOK(T_UNIVERSAL)
<INITIAL>UniversalString TOK(T_UniversalString)
<INITIAL>UTCTime TOK(T_UTCTime)
<snmp>OBJECT-GROUP SNMP_TOK(T_MACRO_OBJECT_GROUP)
<snmp>NOTIFICATION-GROUP SNMP_TOK(T_MACRO_NOTIFICATION_GROUP)
<snmp>MODULE-COMPLIANCE SNMP_TOK(T_MACRO_MODULE_COMPLIANCE)
-<snmp>AGENT-COMPABILITIES SNMP_TOK(T_MACRO_NAME)
-
+<snmp>AGENT-CAPABILITIES SNMP_TOK(T_MACRO_NAME)
+<snmp>MACRO { yy_push_state(snmp_ignore);
+ return T_MACRO;
+ }
<snmp_imports>{
{Identifier} NODE_TOK(T_IDENTIFIER)
{String_Literal} NODE_TOK(T_IDENTIFIER)
{wsp}+ /* ignore whitespace*/
}
+<snmp_ignore>{
+ END { yy_pop_state(); /* Leave macro */ return T_END; }
+ . { printf("%s",yytext);}
+}
{Identifier} NODE_TOK(T_IDENTIFIER)
{String_Literal} NODE_TOK(T_IDENTIFIER)
"<" TOK(T_LT)
"@" TOK(T_AT)
"!" TOK(T_EXCLAMATION)
-"[" TOK(T_LBRACKET)
-"]" TOK(T_RBRACKET)
+<INITIAL,snmp>"[" TOK(T_LBRACKET)
+<INITIAL,snmp>"]" TOK(T_RBRACKET)
<INITIAL,snmp>"{" TOK(T_LBRACET)
<INITIAL,snmp>"}" TOK(T_RBRACET)
<INITIAL,snmp>")" TOK(T_RPARENTHESES)
%token T_INTERSECTION\r
%token T_LAST_UPDATED\r
%token T_LT\r
+%token T_MACRO\r
%token <node>T_MACRO_NAME\r
%token <node>T_MACRO_NOTIFICATION_TYPE\r
%token <node>T_MACRO_NOTIFICATION_GROUP\r
delete $2;\r
}\r
;\r
+/*\r
\r
-tag: \r
tag_type {\r
$$ = $1;\r
$$.m_set = true;\r
}\r
- | T_LBRACKET tag_type T_RBRACKET {\r
+\r
+*/\r
+tag: \r
+ T_LBRACKET tag_type T_RBRACKET {\r
ASN_LOG_DEBUG("tag: tag_type 1 [%d,%ld] ",$2.m_class,$2.m_value);\r
$$ = $2;\r
$$.m_set = true;\r
default: T_DEFAULT value {\r
ASN_LOG_DEBUG("default: with value");\r
$$ = new asn1::node::marker_type(asn1::node::marker_type::FL_DEFAULT);\r
- aeb::intrusive_ptr<asn1::value> p($2->value());\r
- $$->m_value1 = p; \r
+ asn1::valuetype *vt= dynamic_cast<asn1::valuetype *>($2);\r
+ if (vt )\r
+ { \r
+ aeb::intrusive_ptr<asn1::value> p(vt->value());\r
+ $$->m_value1 = p;\r
+ }else \r
+ {\r
+ asn1::object_identifier *oid = $2->as_object_identifier();\r
+ ASN_LOG_ERROR("default: with value BUG value is an oid");\r
+ } \r
}\r
\r
;\r
, $1->name().c_str());\r
asn1::node *i = new asn1::node("CONST STRING",asn1::meta::VALUE);\r
i->type_id(asn1::type::ASN1_STRING);\r
- $$ = new asn1::value_assignment($1->name());\r
+ asn1::value_assignment *va = new asn1::value_assignment($1->name());\r
+ $$ = va;\r
$4->identifier($$);\r
i->identifier($$);\r
$$->type_node(i);\r
- $$->value(new asn1::value(asn1::value::VT_STRING));\r
+ va->set_value(new asn1::value(asn1::value::VT_STRING));\r
delete($1);\r
}\r
| identifier T_INTEGER T_ASSIGN value {\r
ASN_LOG_WARNING("value_assignment : ident %s type INTEGER value=%s TO BE FINALIZED",$1->name().c_str(),$4->name().c_str());\r
asn1::node *i = $4;\r
- $$ = new asn1::value_assignment($1->name());\r
+ asn1::value_assignment *va = new asn1::value_assignment($1->name());\r
+ $$ = va;\r
i->identifier($$);\r
$$->type_node(i); //TODO remove\r
$$->meta_id(asn1::meta::VALUE);\r
- $$->value($4->value());\r
+ va->set_value(dynamic_cast<asn1::valuetype *>($4)->value());\r
delete($1);\r
}\r
| identifier T_TYPEREFERENCE T_ASSIGN value {\r
ASN_LOG_WARNING("value_assignment : ident %s type=%s value=%s TO BE FINALIZED",$1->name().c_str(),$2->name().c_str(),$4->name().c_str());\r
asn1::node *tr = new asn1::typeref( new asn1::simple_reference($2->name()));\r
delete($2); \r
- $$ = new asn1::value_assignment($1->name());\r
+ asn1::value_assignment *va = new asn1::value_assignment($1->name());\r
+ $$ = va;\r
tr->identifier($$);\r
$$->type_node(tr);\r
if ($4->meta_id()() == asn1::meta::VALUE) \r
{\r
- $$->value($4->value());\r
+ va->set_value(dynamic_cast<asn1::valuetype *>($4)->value());\r
}\r
delete($1);\r
}\r
ASN_LOG_WARNING("value_assignment : N ident %s type=%s value=%s TO BE FINALIZED",$1->name().c_str(),$2->name().c_str(),$5->name().c_str());\r
asn1::node *tr = new asn1::typeref( new asn1::simple_reference($2->name()));\r
delete($2); \r
- $$ = new asn1::value_assignment($1->name());\r
+ asn1::value_assignment *va = new asn1::value_assignment($1->name());\r
+ $$ = va;\r
tr->identifier($$);\r
tr->meta_id(asn1::meta::TYPEREF);\r
tr->type_id(asn1::type::ASN1_REFERENCE);\r
$$->type_node(tr);\r
if ($5->meta_id()() == asn1::meta::VALUE) \r
{\r
- $$->value($5->value());\r
+ va->set_value(dynamic_cast<asn1::valuetype *>($5)->value());\r
}\r
delete($1);\r
}\r
| defined_value\r
{\r
ASN_LOG_DEBUG("value: defined_value : %s",$<node>1->name().c_str());\r
+ $$ = $1;\r
$$->meta_id(asn1::meta::VALUE);\r
asn1::value *v = new asn1::value($1->name());\r
- $$->value(v);\r
- $$ = $1;\r
+ dynamic_cast<asn1::valuetype *>($$)->value(v);\r
}\r
| value_from_object {\r
ASN_LOG_DEBUG("value: value_from_object ..");\r
| snmp_object_identity {\r
ASN_LOG_DEBUG("snmp_object_identity :");\r
$$ = new asn1::mib_object_identity_assignment($<node>1->name()); \r
+ } \r
+ | snmp_macro {\r
+ $$ = new asn1::mib_object_identity_assignment($<node>1->name()); \r
}\r
;\r
\r
;\r
\r
snmp_ot_defval: /*NULL */\r
- | T_DEFVAL T_LBRACET T_IDENTIFIER T_RBRACET {\r
+ | T_DEFVAL T_LBRACET value T_RBRACET {\r
+ ASN_LOG_DEBUG("snmp_ot_defval: TODO");\r
}\r
- | T_DEFVAL T_LBRACET T_NUM T_RBRACET {\r
+ | T_DEFVAL T_LBRACET T_QUOTED_STRING T_RBRACET {\r
+ ASN_LOG_DEBUG("snmp_ot_defval: TODO");\r
}\r
;\r
\r
| builtin_type opt_constraint_def\r
| T_BITS T_LBRACET constant_list T_RBRACET \r
;\r
+snmp_macro: T_MACRO_NAME T_MACRO T_END {\r
+ ASN_LOG_DEBUG("snmp smi MACRO to be ignored:");\r
+ }\r
+ | T_MACRO_OBJECT_IDENTITY T_MACRO T_END {\r
+ ASN_LOG_DEBUG("snmp smi MACRO to be ignored:");\r
+ }\r
+ | T_MACRO_OBJECT_TYPE T_MACRO T_END {\r
+ ASN_LOG_DEBUG("snmp smi MACRO to be ignored:");\r
+ }\r
+ | T_MACRO_NOTIFICATION_TYPE T_MACRO T_END {\r
+ ASN_LOG_DEBUG("snmp smi MACRO to be ignored:");\r
+ }\r
+ | T_MACRO_TRAP_TYPE T_MACRO T_END {\r
+ ASN_LOG_DEBUG("snmp smi MACRO to be ignored:");\r
+ }\r
+ | T_MACRO_TC T_MACRO T_END {\r
+ ASN_LOG_DEBUG("snmp smi MACRO to be ignored:");\r
+ }\r
+ | T_MACRO_OBJECT_GROUP T_MACRO T_END {\r
+ ASN_LOG_DEBUG("snmp smi MACRO to be ignored:");\r
+ }\r
+ | T_MACRO_NOTIFICATION_GROUP T_MACRO T_END {\r
+ ASN_LOG_DEBUG("snmp smi MACRO to be ignored:");\r
+ }\r
+ | T_MACRO_MODULE_COMPLIANCE T_MACRO T_END {\r
+ ASN_LOG_DEBUG("snmp smi MACRO to be ignored:");\r
+ }\r
+;\r
\r
/*\r
*\r