//#define SUBMODEL(model, name) \ // setup.namespace_push(# name); \ // setup.include(# model); \ // setup.namespace_pop(); public static void SUBMODEL(nlparse_t setup, string model, string name) { setup.namespace_push(name); setup.include(model); setup.namespace_pop(); }
void parse_netlist() { while (true) { parser_t_token_t token = get_token(); if (token.is_type(parser_t_token_type.ENDOFFILE)) { error(MF_UNEXPECTED_END_OF_FILE()); } m_setup.log().debug.op("Parser: Device: {0}\n", token.str()); if (token.is_(m_tok_ALIAS)) { net_alias(); } else if (token.is_(m_tok_DIPPINS)) { dippins(); } else if (token.is_(m_tok_NET_C)) { net_c(); } else if (token.is_(m_tok_FRONTIER)) { frontier(); } else if (token.is_(m_tok_PARAM)) { netdev_param(); } else if (token.is_(m_tok_DEFPARAM)) { netdev_defparam(); } else if (token.is_(m_tok_HINT)) { netdev_hint(); } else if (token.is_(m_tok_NET_MODEL)) { net_model(); } else if (token.is_(m_tok_SUBMODEL)) { net_submodel(); } else if (token.is_(m_tok_INCLUDE)) { net_include(); } else if (token.is_(m_tok_LOCAL_SOURCE)) { net_local_source(); } else if (token.is_(m_tok_EXTERNAL_SOURCE)) { net_external_source(); } else if (token.is_(m_tok_LOCAL_LIB_ENTRY)) { net_lib_entry(true); } else if (token.is_(m_tok_EXTERNAL_LIB_ENTRY)) { net_lib_entry(false); } else if (token.is_(m_tok_TRUTHTABLE_ENTRY)) { require_token(m_tok_paren_left); string name = get_identifier(); register_local_as_source(name); m_setup.include(name); require_token(m_tok_paren_right); } else if (token.is_(m_tok_NET_REGISTER_DEV)) { net_register_dev(); } else if (token.is_(m_tok_NETLIST_END)) { netdev_netlist_end(); return; } else if (!token.is_type(parser_t_token_type.IDENTIFIER)) { error(MF_EXPECTED_IDENTIFIER_GOT_1(token.str())); } else { device(token.str()); } } }
//#define INCLUDE(name) \ // setup.include(# name); public static void INCLUDE(nlparse_t setup, string name) { setup.include(name); }