text: // license:GPL-2.0+
  // copyright-holders:Couriersud
  /*
   * nl_parser.c
   *
   */
  
  #ifndef NL_PARSER_H_
  #define NL_PARSER_H_
  
  #include "nl_setup.h"
  #include "plib/pparser.h"
  
  namespace netlist
  {
  	class parser_t : public plib::ptokenizer
  	{
  	public:
  		parser_t(plib::putf8_reader &strm, setup_t &setup)
  		: plib::ptokenizer(strm), m_setup(setup) {}
  
  		bool parse(const pstring &nlname = "");
  
  	protected:
  		void parse_netlist(const pstring &nlname);
  		void net_alias();
  		void dippins();
  		void netdev_param();
  		void netdev_hint();
  		void net_c();
  		void frontier();
  		void device(const pstring &dev_type);
  		void netdev_netlist_start();
  		void netdev_netlist_end();
  		void net_model();
  		void net_submodel();
  		void net_include();
  		void net_local_source();
  		void net_truthtable_start(const pstring &nlname);
  
  		/* for debugging messages */
  		netlist_t &netlist() { return m_setup.netlist(); }
  
  		virtual void verror(const pstring &msg, int line_num, const pstring &line) override;
  	private:
  
  		nl_double eval_param(const token_t tok);
  
  		token_id_t m_tok_param_left;
  		token_id_t m_tok_param_right;
  		token_id_t m_tok_comma;
  		token_id_t m_tok_ALIAS;
  		token_id_t m_tok_NET_C;
  		token_id_t m_tok_DIPPINS;
  		token_id_t m_tok_FRONTIER;
  		token_id_t m_tok_PARAM;
  		token_id_t m_tok_HINT;
  		token_id_t m_tok_NET_MODEL;
  		token_id_t m_tok_NETLIST_START;
  		token_id_t m_tok_NETLIST_END;
  		token_id_t m_tok_SUBMODEL;
  		token_id_t m_tok_INCLUDE;
  		token_id_t m_tok_LOCAL_SOURCE;
  		token_id_t m_tok_LOCAL_LIB_ENTRY;
  		token_id_t m_tok_TRUTHTABLE_START;
  		token_id_t m_tok_TRUTHTABLE_END;
  		token_id_t m_tok_TT_HEAD;
  		token_id_t m_tok_TT_LINE;
  		token_id_t m_tok_TT_FAMILY;
  
  		setup_t &m_setup;
  };
  
  }
  
  #endif /* NL_PARSER_H_ */
  