root/htags/lexcommon.h(236.html)

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


/*
 * Copyright (c) 2004, 2005 Tama Communications Corporation
 *
 * This file is part of GNU GLOBAL.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * 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.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
#ifndef _LEXCOMMON_H #define _LEXCOMMON_H #include "incop.h" #include "tab.h" /* * Definition of LEXTEXT, LEXLENG, LEXIN and LEXRESTART. * * These symbols are substitutions of yytext, yyleng, yyin and yyrestart. * You should write lex code using them. * The usage of this file is, for instance, in c.l: * * #define lex_symbol_generation_rule(x) c_ ## x * #include "lexcommon.h" */
#ifndef lex_symbol_generation_rule ERROR: lex_symbol_generation_rule(x) macro not defined. lexcommon.h requires the lex_symbol_generation_rule(x) macro for each language to generate language specific symbols. #endif #define LEXTEXT lex_symbol_generation_rule(text) #define LEXLENG lex_symbol_generation_rule(leng) #define LEXIN lex_symbol_generation_rule(in) #define LEXRESTART lex_symbol_generation_rule(restart) /* * The default action for line control. * These can be applicable to most languages. * You must define C_COMMENT, CPP_COMMENT SHELL_COMMENT, LITERAL, STRING * and PREPROCESSOR_LINE as %start values, even if they are not used. * It assumed that CPP_COMMENT and SHELL_COMMENT is one line comment. */
static int lexcommon_lineno; static int begin_line; /* * If you want newline to terminate string, set this variable to 1. */
static int newline_terminate_string = 0; /* * Variables for converting tabs to spaces. */
static int dest_column; static int left_spaces; #define YY_INPUT(buf, result, max_size) do { \ result = read_file_detabing(buf, max_size, LEXIN, \ &dest_column, &left_spaces); \ } while (0) #define LINENO lexcommon_lineno #define DEFAULT_BEGIN_OF_FILE_ACTION { \ LEXIN = ip; \ LEXRESTART(LEXIN); \ LINENO = 1; \ begin_line = 1; \ dest_column = 0; \ left_spaces = 0; \ } #define DEFAULT_YY_USER_ACTION { \ if (begin_line) { \ put_begin_of_line(LINENO); \ switch (YY_START) { \ case C_COMMENT: \ case CPP_COMMENT: \ case SHELL_COMMENT: \ echos(comment_begin); \ break; \ } \ begin_line = 0; \ } \ } #define DEFAULT_END_OF_LINE_ACTION { \ switch (YY_START) { \ case CPP_COMMENT: \ case SHELL_COMMENT: \ yy_pop_state(); \ /* FALLTHROUGH */
\
case C_COMMENT: \ echos(comment_end); \ break; \ case STRING: \ case LITERAL: \ if (newline_terminate_string) \ yy_pop_state(); \ break; \ } \ if (YY_START == PREPROCESSOR_LINE) \ yy_pop_state(); \ put_end_of_line(LINENO); \ /* for the next line */
\
LINENO++; \ begin_line = 1; \ } #define DEFAULT_BACKSLASH_NEWLINE_ACTION { \ echoc('\\'); \ switch (YY_START) { \ case CPP_COMMENT: \ case C_COMMENT: \ case SHELL_COMMENT: \ echos(comment_end); \ break; \ } \ put_end_of_line(LINENO); \ /* for the next line */
\
LINENO++; \ begin_line = 1; \ } /* * Output routine. */
extern void echoc(int); extern void echos(const char *); extern const char *generate_guide(int); extern void put_anchor(char *, int, int); extern void put_include_anchor(struct data *, const char *); extern void put_reserved_word(const char *); extern void put_macro(const char *); extern void unknown_preprocessing_directive(const char *, int); extern void unexpected_eof(int); extern void unknown_yacc_directive(const char *, int); extern void missing_left(const char *, int); extern void put_char(int); extern void put_string(const char *); extern void put_brace(const char *); extern void put_begin_of_line(int); extern void put_end_of_line(int); #endif /* ! _LEXCOMMON_H */

/* [<][>][^][v][top][bottom][index][help] */