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

📄 vpreproclex.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: Internal header for lex interfacing////// Authors: Wilson Snyder////// Code available from: http://www.veripool.org/verilog-perl////// This header provides the interface between the lex proper VPreprocLex.l/.cpp/// and the class implementation file VPreproc.cpp/// It is not intended for user applications./////*************************************************************************#ifndef _VPREPROCLEX_H_		// Guard#define _VPREPROCLEX_H_ 1#include "VFileLine.h"// Token codes// If changing, see VPreproc.cpp's VPreprocImp::tokenName()#define VP_EOF		0#define VP_INCLUDE	256#define VP_IFDEF	257#define VP_IFNDEF	258#define VP_ENDIF	259#define VP_UNDEF	260#define VP_DEFINE	261#define VP_ELSE		262#define VP_ELSIF	263#define VP_LINE		264#define VP_SYMBOL	300#define VP_STRING	301#define VP_DEFVALUE	302#define VP_COMMENT	303#define VP_TEXT		304#define VP_WHITE	305#define VP_DEFREF	306#define VP_DEFARG	307#define VP_ERROR	308//======================================================================// Externs created by flex// We add a prefix so that other lexers/flexers in the same program won't collide.#ifndef yy_create_buffer# define yy_create_buffer VPreprocLex_create_buffer# define yy_delete_buffer VPreprocLex_delete_buffer# define yy_scan_buffer VPreprocLex_scan_buffer# define yy_scan_string VPreprocLex_scan_string# define yy_scan_bytes VPreprocLex_scan_bytes# define yy_flex_debug VPreprocLex_flex_debug# define yy_init_buffer VPreprocLex_init_buffer# define yy_flush_buffer VPreprocLex_flush_buffer# define yy_load_buffer_state VPreprocLex_load_buffer_state# define yy_switch_to_buffer VPreprocLex_switch_to_buffer# define yyin VPreprocLexin# define yyleng VPreprocLexleng# define yylex VPreprocLexlex# define yyout VPreprocLexout# define yyrestart VPreprocLexrestart# define yytext VPreprocLextext#endif#ifndef YY_BUFFER_STATEstruct yy_buffer_state;typedef struct yy_buffer_state *YY_BUFFER_STATE;# define YY_BUF_SIZE 16384#endifextern int yylex();extern void yyrestart(FILE*);extern char* yytext;extern int yyleng;YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size );void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer );void yy_delete_buffer( YY_BUFFER_STATE b );//======================================================================#define KEEPCMT_SUB 2#define KEEPCMT_EXP 3//======================================================================/// Class entry for each per-lexter stateclass VPreprocLex {  public:	// Used only by VPreprocLex.cpp and VPreproc.cpp    VFileLine*	m_curFilelinep;	///< Current processing point    // Parse state    FILE*	m_fp;		///< File state is for    YY_BUFFER_STATE  m_yyState;	///< flex input state    // State to lexer    static VPreprocLex* s_currentLexp;	///< Current lexing point    int		m_keepComments;		///< Emit comments in output text    int		m_keepWhitespace;	///< Emit all whitespace in output text    bool	m_pedantic;	///< Obey standard; don't Substitute `__FILE__ and `__LINE__    // State from lexer    int		m_parenLevel;	///< Parenthesis counting inside def args    string	m_defValue;	///< Definition value being built.    // CONSTRUCTORS    VPreprocLex(FILE* fp) {	m_fp = fp;	m_yyState = yy_create_buffer (fp, YY_BUF_SIZE);	m_keepComments = 0;	m_keepWhitespace = 1;	m_pedantic = false;	m_parenLevel = 0;    }    ~VPreprocLex() { fclose(m_fp); yy_delete_buffer(m_yyState); }    /// Called by VPreprocLex.l from lexer    void appendDefValue(const char* text, int len);    void lineDirective(const char* text) { m_curFilelinep = m_curFilelinep->lineDirective(text); }    void linenoInc() { m_curFilelinep = m_curFilelinep->create(m_curFilelinep->lineno()+1); }    /// Called by VPreproc.cpp to inform lexer    void pushStateDefArg(int level);    void pushStateDefValue();    void pushStateIncFilename();    void unputString(const char* textp);    void unused();};#endif // Guard

⌨️ 快捷键说明

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