⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vpreproc.h

📁 Verilog Parser in Perl
💻 H
字号:
// -*- C++ -*-//*************************************************************************//// Copyright 2000-2009 by Wilson Snyder.  This program is free software;// you can redistribute it and/or modify it under the terms of either the GNU// Lesser General Public License or the Perl Artistic License.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.////*************************************************************************/// \file/// \brief Verilog::Preproc: Preprocess verilog code////// Authors: Wilson Snyder////// Code available from: http://www.veripool.org/verilog-perl/////*************************************************************************#ifndef _VPREPROC_H_#define _VPREPROC_H_ 1#include <string>#include <map>#include <iostream>using namespace std;#include "VFileLine.h"#ifdef open# undef open	// Perl 64 bit on solaris has a nasty hack that redefines open#endif/// Generic opaque pointer to VPreprocImp implementation class.class VPreprocOpaque {};class VDefine;//**********************************************************************// VPreproc/// Verilog Preprocessor./////// This defines a preprocessor.  Functions are virtual so users can override them./// After creating, call open(), then getline() in a loop.  The class will to the rest...class VPreproc {public:    VPreproc(VFileLine* filelinep);    virtual ~VPreproc() {};    // CONSTANTS    static const unsigned DEFINE_RECURSION_LEVEL_MAX = 50;	///< How many `def substitutions before an error    static const unsigned INCLUDE_DEPTH_MAX = 500;	///< How many `includes deep before an error    // ACCESSORS    /// Insert given file into this point in input stream    virtual void open(string filename, VFileLine* filelinep=NULL);    virtual void debug(int level);	///< Set debugging level    virtual string getline();		///< Return next line/lines. (Null if done.)    virtual bool isEof();		///< Return true on EOF.    virtual void insertUnreadback(string text);    virtual VFileLine* filelinep();	///< File/Line number for last getline call    // The default behavior is to pass all unknown `defines right through.    // This lets the user determine how to report the errors.  It also nicely    // allows `celldefine and such to remain in the output stream.    // CONTROL METHODS    // These options control how the parsing proceeds    virtual int keepComments() { return 1; }		///< Return comments, 0=no, 1=yes, 2=callback    virtual int keepWhitespace() { return 1; }		///< Return extra whitespace, 0=no, 1=yes    virtual bool lineDirectives() { return true; }	///< Insert `line directives    virtual bool pedantic() { return false; }		///< Obey standard; Don't substitute `__FILE__ and `__LINE__    // CALLBACK METHODS    // This probably will want to be overridden for given child users of this class.    virtual void comment(string cmt);		///< Comment detected (if keepComments==2)    virtual void include(string filename);	///< Request a include file be processed    virtual void define(string name, string value, string params); ///< `define without any parameters    virtual void undef(string name);		///< Remove a definition    virtual bool defExists(string name);	///< Return true if define exists    virtual string defParams(string name);	///< Return parameter list if define exists    virtual string defValue(string name);	///< Return value of given define (should exist)    // UTILITIES    void error(string msg) { filelinep()->error(msg); }	///< Report a error    void fatal(string msg) { filelinep()->fatal(msg); }	///< Report a fatal errorprivate:    VPreprocOpaque*	m_opaquep;	///< Pointer to parser's implementation data.};#endif // Guard

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -