diff options
Diffstat (limited to 'src/lib/netlist/nl_parser.cpp')
-rw-r--r-- | src/lib/netlist/nl_parser.cpp | 79 |
1 files changed, 37 insertions, 42 deletions
diff --git a/src/lib/netlist/nl_parser.cpp b/src/lib/netlist/nl_parser.cpp index 3e4ecd0937c..4d4638bea21 100644 --- a/src/lib/netlist/nl_parser.cpp +++ b/src/lib/netlist/nl_parser.cpp @@ -33,6 +33,8 @@ namespace netlist .comment("/*", "*/", "//"); m_tok_paren_left = m_tokenizer.register_token("("); m_tok_paren_right = m_tokenizer.register_token(")"); + m_tok_brace_left = m_tokenizer.register_token("{"); + m_tok_brace_right = m_tokenizer.register_token("}"); m_tok_comma = m_tokenizer.register_token(","); m_tok_static = m_tokenizer.register_token("static"); @@ -52,11 +54,9 @@ namespace netlist "EXTERNAL_LIB_ENTRY"); m_tok_SUBMODEL = m_tokenizer.register_token("SUBMODEL"); m_tok_NETLIST_START = m_tokenizer.register_token("NETLIST_START"); - m_tok_NETLIST_END = m_tokenizer.register_token("NETLIST_END"); m_tok_NETLIST_EXTERNAL = m_tokenizer.register_token("NETLIST_EXTERNAL"); m_tok_EXTERNAL_SOURCE = m_tokenizer.register_token("EXTERNAL_SOURCE"); - m_tok_TRUTHTABLE_START = m_tokenizer.register_token("TRUTHTABLE_START"); - m_tok_TRUTHTABLE_END = m_tokenizer.register_token("TRUTHTABLE_END"); + m_tok_TRUTH_TABLE = m_tokenizer.register_token("TRUTH_TABLE"); m_tok_TRUTHTABLE_ENTRY = m_tokenizer.register_token("TRUTHTABLE_ENTRY"); m_tok_TT_HEAD = m_tokenizer.register_token("TT_HEAD"); m_tok_TT_LINE = m_tokenizer.register_token("TT_LINE"); @@ -77,8 +77,8 @@ namespace netlist return parse(tokstor, nlname); } - void parser_t::parse_tokens(plib::istream_uptr &&strm, - token_store_t & tokstor) + void + parser_t::parse_tokens(plib::istream_uptr &&strm, token_store_t &tokstor) { plib::putf8_reader u8reader(strm.release_stream()); m_tokenizer.append_to_store(&u8reader, tokstor); @@ -100,23 +100,16 @@ namespace netlist return false; } - if (token.is(m_tok_NETLIST_END) || token.is(m_tok_TRUTHTABLE_END)) + if (token.is(m_tok_brace_right)) // Netlist ended? { if (!in_nl) error(MF_PARSER_UNEXPECTED_1(token.str())); else - { in_nl = false; - } - require_token(m_tok_paren_left); - require_token(m_tok_paren_right); - m_cur_local->push_back(token); - m_cur_local->push_back(token_t(m_tok_paren_left)); - m_cur_local->push_back(token_t(m_tok_paren_right)); } else if (token.is(m_tok_NETLIST_START) - || token.is(m_tok_TRUTHTABLE_START)) + || token.is(m_tok_TRUTH_TABLE)) { if (in_nl) error(MF_PARSER_UNEXPECTED_1(token.str())); @@ -125,22 +118,24 @@ namespace netlist if (token.is(m_tok_NETLIST_START) && (name.str() == nlname || nlname.empty())) { - require_token(m_tok_paren_right); parse_netlist(); return true; } - if (token.is(m_tok_TRUTHTABLE_START) && name.str() == nlname) + if (token.is(m_tok_TRUTH_TABLE)) { - net_truth_table_start(nlname); - return true; + if (name.str() == nlname) + { + net_truth_table_start(nlname); + return true; + } } // create a new cached local store m_local.emplace(name.str(), token_store_t()); m_cur_local = &m_local[name.str()]; auto sl = location(); - auto li = plib::pfmt( - "# {1} \"{2}\"")(sl.line(), sl.file_name()); + auto li = plib::pfmt("# {1} \"{2}\"")(sl.line(), + sl.file_name()); m_cur_local->push_back(token_t(token_type::LINEMARKER, li)); m_cur_local->push_back(token); @@ -149,6 +144,14 @@ namespace netlist // m_cur_local->push_back(token_t(m_tok_paren_right)); in_nl = true; } + else if (token.is(m_tok_brace_left)) + { + // FIXME - do nothing for now + if (!in_nl) + printf("FIXME\n"); + else + m_cur_local->push_back(token); + } // FIXME: do we really need this going forward ? there should be no // need // for NETLIST_EXTERNAL in netlist files @@ -176,6 +179,9 @@ namespace netlist void parser_t::parse_netlist() { + require_token(m_tok_paren_right); + require_token(m_tok_brace_left); + while (true) { token_t token = get_token(); @@ -222,14 +228,9 @@ namespace netlist 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(); + else if (token.is(m_tok_brace_right)) return; - } else if (!token.is_type(token_type::IDENTIFIER)) error(MF_EXPECTED_IDENTIFIER_GOT_1(token.str())); else @@ -265,6 +266,7 @@ namespace netlist require_token(m_tok_comma); pstring def_param = get_string(); require_token(m_tok_paren_right); + require_token(m_tok_brace_left); netlist::tt_desc desc; desc.name = nlname; @@ -299,9 +301,7 @@ namespace netlist } else { - require_token(token, m_tok_TRUTHTABLE_END); - require_token(m_tok_paren_left); - require_token(m_tok_paren_right); + require_token(token, m_tok_brace_right); // FIXME: proper location m_setup.truth_table_create(desc, def_param, location()); return; @@ -309,13 +309,6 @@ namespace netlist } } - void parser_t::netdev_netlist_end() - { - // don't do much - require_token(m_tok_paren_left); - require_token(m_tok_paren_right); - } - void parser_t::net_model() { require_token(m_tok_paren_left); @@ -413,7 +406,7 @@ namespace netlist while (true) { pstring t1 = get_identifier(); - m_setup.register_link(first, t1); + m_setup.register_connection(first, t1); m_setup.log().debug("Parser: Connect: {1} {2}\n", first, t1); token_t n = get_token(); if (n.is(m_tok_paren_right)) @@ -446,8 +439,10 @@ namespace netlist std::size_t n = pins.size(); for (std::size_t i = 0; i < n / 2; i++) { - m_setup.register_alias(plib::pfmt("{1}")(i + 1), pins[i * 2]); - m_setup.register_alias(plib::pfmt("{1}")(n - i), pins[i * 2 + 1]); + m_setup.register_alias(detail::alias_type::PACKAGE_PIN, + plib::pfmt("{1}")(i + 1), pins[i * 2]); + m_setup.register_alias(detail::alias_type::PACKAGE_PIN, + plib::pfmt("{1}")(n - i), pins[i * 2 + 1]); } } @@ -481,7 +476,7 @@ namespace netlist if (tok.is_type(token_type::STRING)) { m_setup.log().debug("Parser: DefParam: {1} {2}\n", param, - tok.str()); + tok.str()); m_setup.register_default_param(param, tok.str()); require_token(m_tok_paren_right); } @@ -584,8 +579,8 @@ namespace netlist return false; } - plib::istream_uptr source_token_t::stream( - [[maybe_unused]] const pstring &name) + plib::istream_uptr + source_token_t::stream([[maybe_unused]] const pstring &name) { return plib::istream_uptr(); } |