/* * Copyright (C) 2003-2010 Dynare Team * * This file is part of Dynare. * * Dynare 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. * * Dynare 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 Dynare. If not, see . */ %{ using namespace std; #include #include "ParsingDriver.hh" // Announce to Flex the prototype we want for lexing function #define YY_DECL \ Dynare::parser::token_type \ DynareFlex::lex(Dynare::parser::semantic_type *yylval, \ Dynare::parser::location_type *yylloc, \ ParsingDriver &driver) // Shortcut to access tokens defined by Bison typedef Dynare::parser::token token; /* By default yylex returns int, we use token_type. Unfortunately yyterminate by default returns 0, which is not of token_type. */ #define yyterminate() return Dynare::parser::token_type (0); int comment_caller, line_caller; /* Particular value : when sigma_e command is found this flag is set to 1, when command finished it is set to 0 */ int sigma_e = 0; string eofbuff; %} %option c++ %option prefix="Dynare" %option case-insensitive noyywrap nounput batch debug never-interactive /* NB: if new start conditions are defined, add them in the line for <> */ %x COMMENT %x DYNARE_STATEMENT %x DYNARE_BLOCK %x NATIVE %x NATIVE_COMMENT %x LINE1 %x LINE2 %x LINE3 %{ // Increments location counter for every token read #define YY_USER_ACTION location_increment(yylloc, yytext); %} %% /* Code put at the beginning of yylex() */ %{ // Reset location before reading token yylloc->step(); %} /* Rules for matching $line directives */ <*>^@#line\ \" { line_caller = YYSTATE; BEGIN(LINE1); } [^\"]* { filename = string(yytext); BEGIN(LINE2); } \" BEGIN(LINE3); [0-9]+ { yylloc->begin.line = yylloc->end.line = atoi(yytext) - 1; BEGIN(line_caller); } /* spaces, tabs and carriage returns are ignored */ <*>[ \t\r\f]+ { yylloc->step(); } [\n]+ { yylloc->step(); } /* Comments */ ["%"].* ["/"]["/"].* "/*" {comment_caller = YY_START; BEGIN COMMENT;} "*/" {BEGIN comment_caller;} . /* Begin of a Dynare statement */ var {BEGIN DYNARE_STATEMENT; return token::VAR;} varexo {BEGIN DYNARE_STATEMENT; return token::VAREXO;} varexo_det {BEGIN DYNARE_STATEMENT; return token::VAREXO_DET;} predetermined_variables {BEGIN DYNARE_STATEMENT; return token::PREDETERMINED_VARIABLES;} parameters {BEGIN DYNARE_STATEMENT; return token::PARAMETERS;} periods {BEGIN DYNARE_STATEMENT; return token::PERIODS;} model_info {BEGIN DYNARE_STATEMENT; return token::MODEL_INFO;} estimation {BEGIN DYNARE_STATEMENT; return token::ESTIMATION;} varobs {BEGIN DYNARE_STATEMENT; return token::VAROBS;} unit_root_vars {BEGIN DYNARE_STATEMENT; return token::UNIT_ROOT_VARS;} rplot {BEGIN DYNARE_STATEMENT; return token::RPLOT;} osr_params {BEGIN DYNARE_STATEMENT; return token::OSR_PARAMS;} osr {BEGIN DYNARE_STATEMENT; return token::OSR;} dynatype {BEGIN DYNARE_STATEMENT; return token::DYNATYPE;} dynasave {BEGIN DYNARE_STATEMENT; return token::DYNASAVE;} model_comparison {BEGIN DYNARE_STATEMENT; return token::MODEL_COMPARISON;} change_type {BEGIN DYNARE_STATEMENT; return token::CHANGE_TYPE;} load_params_and_steady_state {BEGIN DYNARE_STATEMENT; return token::LOAD_PARAMS_AND_STEADY_STATE;} save_params_and_steady_state {BEGIN DYNARE_STATEMENT; return token::SAVE_PARAMS_AND_STEADY_STATE;} write_latex_dynamic_model {BEGIN DYNARE_STATEMENT; return token::WRITE_LATEX_DYNAMIC_MODEL;} write_latex_static_model {BEGIN DYNARE_STATEMENT; return token::WRITE_LATEX_STATIC_MODEL;} steady {BEGIN DYNARE_STATEMENT; return token::STEADY;} check {BEGIN DYNARE_STATEMENT; return token::CHECK;} simul {BEGIN DYNARE_STATEMENT; return token::SIMUL;} stoch_simul {BEGIN DYNARE_STATEMENT; return token::STOCH_SIMUL;} dsample {BEGIN DYNARE_STATEMENT; return token::DSAMPLE;} Sigma_e {BEGIN DYNARE_STATEMENT; sigma_e = 1; return token::SIGMA_E;} calib {BEGIN DYNARE_STATEMENT; return token::CALIB;} planner_objective {BEGIN DYNARE_STATEMENT; return token::PLANNER_OBJECTIVE;} ramsey_policy {BEGIN DYNARE_STATEMENT; return token::RAMSEY_POLICY;} identification {BEGIN DYNARE_STATEMENT; return token::IDENTIFICATION;} bvar_density {BEGIN DYNARE_STATEMENT; return token::BVAR_DENSITY; } bvar_forecast {BEGIN DYNARE_STATEMENT; return token::BVAR_FORECAST; } dynare_sensitivity {BEGIN DYNARE_STATEMENT; return token::DYNARE_SENSITIVITY;} initval_file {BEGIN DYNARE_STATEMENT; return token::INITVAL_FILE;} forecast {BEGIN DYNARE_STATEMENT; return token::FORECAST;} shock_decomposition {BEGIN DYNARE_STATEMENT; return token::SHOCK_DECOMPOSITION;} sbvar {BEGIN DYNARE_STATEMENT; return token::SBVAR;} ms_sbvar {BEGIN DYNARE_STATEMENT; return token::MS_SBVAR;} conditional_forecast {BEGIN DYNARE_STATEMENT; return token::CONDITIONAL_FORECAST;} plot_conditional_forecast {BEGIN DYNARE_STATEMENT; return token::PLOT_CONDITIONAL_FORECAST;} markov_switching {BEGIN DYNARE_STATEMENT; return token::MARKOV_SWITCHING;} svar {BEGIN DYNARE_STATEMENT; return token::SVAR;} external_function {BEGIN DYNARE_STATEMENT; return token::EXTERNAL_FUNCTION;} /* End of a Dynare statement */ ; { if (!sigma_e) BEGIN INITIAL; return Dynare::parser::token_type (yytext[0]); } /* Begin of a Dynare block */ model {BEGIN DYNARE_BLOCK; return token::MODEL;} steady_state_model {BEGIN DYNARE_BLOCK; return token::STEADY_STATE_MODEL;} initval {BEGIN DYNARE_BLOCK; return token::INITVAL;} endval {BEGIN DYNARE_BLOCK; return token::ENDVAL;} histval {BEGIN DYNARE_BLOCK; return token::HISTVAL;} shocks {BEGIN DYNARE_BLOCK; return token::SHOCKS;} mshocks {BEGIN DYNARE_BLOCK; return token::MSHOCKS;} estimated_params {BEGIN DYNARE_BLOCK; return token::ESTIMATED_PARAMS;} /* priors is an alias for estimated_params */ priors {BEGIN DYNARE_BLOCK;return token::ESTIMATED_PARAMS;} estimated_params_init {BEGIN DYNARE_BLOCK; return token::ESTIMATED_PARAMS_INIT;} estimated_params_bounds {BEGIN DYNARE_BLOCK; return token::ESTIMATED_PARAMS_BOUNDS;} observation_trends {BEGIN DYNARE_BLOCK; return token::OBSERVATION_TRENDS;} optim_weights {BEGIN DYNARE_BLOCK; return token::OPTIM_WEIGHTS;} calib_var {BEGIN DYNARE_BLOCK; return token::CALIB_VAR;} homotopy_setup {BEGIN DYNARE_BLOCK; return token::HOMOTOPY_SETUP;} conditional_forecast_paths {BEGIN DYNARE_BLOCK; return token::CONDITIONAL_FORECAST_PATHS;} svar_identification {BEGIN DYNARE_BLOCK; return token::SVAR_IDENTIFICATION;} /* For the semicolon after an "end" keyword */ ; {return Dynare::parser::token_type (yytext[0]);} /* End of a Dynare block */ end {BEGIN INITIAL; return token::END;} /* Inside of a Dynare statement */ datafile {return token::DATAFILE;} nobs {return token::NOBS;} first_obs {return token::FIRST_OBS;} prefilter {return token::PREFILTER;} presample {return token::PRESAMPLE;} lik_algo {return token::LIK_ALGO;} lik_init {return token::LIK_INIT;} graph {return token::GRAPH;} nograph {return token::NOGRAPH;} print {return token::PRINT;} noprint {return token::NOPRINT;} conf_sig {return token::CONF_SIG;} mh_replic {return token::MH_REPLIC;} mh_drop {return token::MH_DROP;} mh_jscale {return token::MH_JSCALE;} mh_init_scale {return token::MH_INIT_SCALE;} mode_file {return token::MODE_FILE;} mode_compute {return token::MODE_COMPUTE;} mode_check {return token::MODE_CHECK;} prior_trunc {return token::PRIOR_TRUNC;} mh_mode {return token::MH_MODE;} mh_nblocks {return token::MH_NBLOCKS;} load_mh_file {return token::LOAD_MH_FILE;} loglinear {return token::LOGLINEAR;} nodiagnostic {return token::NODIAGNOSTIC;} kalman_algo {return token::KALMAN_ALGO;} kalman_tol {return token::KALMAN_TOL;} forecast {return token::FORECAST;} smoother {return token::SMOOTHER;} bayesian_irf {return token::BAYESIAN_IRF;} dsge_var {return token::DSGE_VAR;} dsge_varlag {return token::DSGE_VARLAG;} moments_varendo {return token::MOMENTS_VARENDO;} filtered_vars {return token::FILTERED_VARS;} filter_step_ahead {return token::FILTER_STEP_AHEAD;} relative_irf {return token::RELATIVE_IRF;} tex {return token::TEX;} nomoments {return token::NOMOMENTS;} corr {return token::CORR;} nocorr {return token::NOCORR;} optim {return token::OPTIM;} periods {return token::PERIODS;} minimal_solving_periods {return token::MINIMAL_SOLVING_PERIODS;} markowitz {return token::MARKOWITZ;} marginal_density {return token::MARGINAL_DENSITY;} laplace {return token::LAPLACE;} modifiedharmonicmean {return token::MODIFIEDHARMONICMEAN;} constant {return token::CONSTANT;} noconstant {return token::NOCONSTANT;} covar {return token::COVAR;} filename {return token::FILENAME;} diffuse_filter {return token::DIFFUSE_FILTER;} plot_priors {return token::PLOT_PRIORS;} aim_solver {return token::AIM_SOLVER;} partial_information {return token::PARTIAL_INFORMATION;} conditional_variance_decomposition {return token::CONDITIONAL_VARIANCE_DECOMPOSITION;} name {return token::EXT_FUNC_NAME;} nargs {return token::EXT_FUNC_NARGS;} first_deriv_provided {return token::FIRST_DERIV_PROVIDED;} second_deriv_provided {return token::SECOND_DERIV_PROVIDED;} freq {return token::FREQ;} initial_year {return token::INITIAL_YEAR;} initial_subperiod {return token::INITIAL_SUBPERIOD;} final_year {return token::FINAL_YEAR;} final_subperiod {return token::FINAL_SUBPERIOD;} vlist {return token::VLIST;} varlist {return token::VARLIST;} vlistlog {return token::VLISTLOG;} vlistper {return token::VLISTPER;} restriction_fname {return token::RESTRICTION_FNAME;} nlags {return token::NLAGS;} cross_restrictions {return token::CROSS_RESTRICTIONS;} contemp_reduced_form {return token::CONTEMP_REDUCED_FORM;} real_pseudo_forecast {return token::REAL_PSEUDO_FORECAST;} bayesian_prior {return token::BAYESIAN_PRIOR;} dummy_obs {return token::DUMMY_OBS;} nstates {return token::NSTATES;} indxscalesstates {return token::INDXSCALESSTATES;} alpha { yylval->string_val = new string(yytext); return token::ALPHA; } beta { yylval->string_val = new string(yytext); return token::BETA; } gsig2_lmd {return token::GSIG2_LMD;} gsig2_lmdm {return token::GSIG2_LMDM;} q_diag {return token::Q_DIAG;} flat_prior {return token::FLAT_PRIOR;} ncsk {return token::NCSK;} nstd {return token::NSTD;} ninv { yylval->string_val = new string(yytext); return token::NINV; } indxparr {return token::INDXPARR;} indxovr {return token::INDXOVR;} aband { yylval->string_val = new string(yytext); return token::ABAND; } indxap {return token::INDXAP;} apband {return token::APBAND;} indximf {return token::INDXIMF;} imfband {return token::IMFBAND;} indxfore {return token::INDXFORE;} foreband {return token::FOREBAND;} indxgforehat {return token::INDXGFOREHAT;} indxgimfhat {return token::INDXGIMFHAT;} indxestima {return token::INDXESTIMA;} indxgdls {return token::INDXGDLS;} eq_ms {return token::EQ_MS;} cms { yylval->string_val = new string(yytext); return token::CMS; } ncms { yylval->string_val = new string(yytext); return token::NCMS; } eq_cms {return token::EQ_CMS;} tlindx {return token::TLINDX;} tlnumber {return token::TLNUMBER;} cnum { yylval->string_val = new string(yytext); return token::CNUM; } banact {return token::BANACT;} output_file_tag {return token::OUTPUT_FILE_TAG;} create_initialization_file {return token::CREATE_INITIALIZATION_FILE;} estimate_msmodel {return token::ESTIMATE_MSMODEL;} compute_mdd {return token::COMPUTE_MDD;} compute_probabilities {return token::COMPUTE_PROBABILITIES;} print_draws {return token::PRINT_DRAWS;} n_draws {return token::N_DRAWS;} thinning_factor {return token::THINNING_FACTOR;} markov_file {return token::MARKOV_FILE;} mhm_file {return token::MHM_FILE;} proposal_draws {return token::PROPOSAL_DRAWS;} draws_nbr_burn_in_1 {return token::DRAWS_NBR_BURN_IN_1;} draws_nbr_burn_in_2 {return token::DRAWS_NBR_BURN_IN_2;} draws_nbr_mean_var_estimate {return token::DRAWS_NBR_MEAN_VAR_ESTIMATE;} draws_nbr_modified_harmonic_mean {return token::DRAWS_NBR_MODIFIED_HARMONIC_MEAN;} dirichlet_scale {return token::DIRICHLET_SCALE;} instruments {return token::INSTRUMENTS;} /* These four (var, varexo, varexo_det, parameters) are for change_type */ var { return token::VAR; } varexo { return token::VAREXO; } varexo_det { return token::VAREXO_DET; } parameters { return token::PARAMETERS; } predetermined_variables { return token::PREDETERMINED_VARIABLES; } bvar_prior_tau { return token::BVAR_PRIOR_TAU; } bvar_prior_decay { return token::BVAR_PRIOR_DECAY; } bvar_prior_lambda { return token::BVAR_PRIOR_LAMBDA; } bvar_prior_mu { return token::BVAR_PRIOR_MU; } bvar_prior_omega { return token::BVAR_PRIOR_OMEGA; } bvar_prior_flat { return token::BVAR_PRIOR_FLAT; } bvar_prior_train { return token::BVAR_PRIOR_TRAIN; } bvar_replic { return token::BVAR_REPLIC; } homotopy_mode {return token::HOMOTOPY_MODE; } homotopy_steps {return token::HOMOTOPY_STEPS; } controlled_varexo {return token::CONTROLLED_VAREXO; } parameter_set {return token::PARAMETER_SET; } prior_mode {return token::PRIOR_MODE; } prior_mean {return token::PRIOR_MEAN; } posterior_mode {return token::POSTERIOR_MODE; } posterior_mean {return token::POSTERIOR_MEAN; } posterior_median {return token::POSTERIOR_MEDIAN; } k_order_solver {return token::K_ORDER_SOLVER; } filter_covariance {return token::FILTER_COVARIANCE; } filter_decomposition {return token::FILTER_DECOMPOSITION; } selected_variables_only {return token::SELECTED_VARIABLES_ONLY; } pruning {return token::PRUNING; }; [\$][^$]*[\$] { strtok(yytext+1, "$"); yylval->string_val = new string(yytext + 1); return token::TEX_NAME; } /* Inside a Dynare block */ var {return token::VAR;} stderr {return token::STDERR;} values {return token::VALUES;} corr {return token::CORR;} periods {return token::PERIODS;} cutoff {return token::CUTOFF;} mfs {return token::MFS;} gamma_pdf {return token::GAMMA_PDF;} beta_pdf {return token::BETA_PDF;} normal_pdf {return token::NORMAL_PDF;} inv_gamma_pdf {return token::INV_GAMMA_PDF;} inv_gamma1_pdf {return token::INV_GAMMA1_PDF;} inv_gamma2_pdf {return token::INV_GAMMA2_PDF;} uniform_pdf {return token::UNIFORM_PDF;} dsge_prior_weight {return token::DSGE_PRIOR_WEIGHT;} ; {return Dynare::parser::token_type (yytext[0]);} # {return Dynare::parser::token_type (yytext[0]);} autocorr {return token::AUTOCORR;} /* Inside Dynare statement */ solve_algo {return token::SOLVE_ALGO;} dr_algo {return token::DR_ALGO;} simul_algo {return token::SIMUL_ALGO;} stack_solve_algo {return token::STACK_SOLVE_ALGO;} drop {return token::DROP;} order {return token::ORDER;} replic {return token::REPLIC;} ar {return token::AR;} nofunctions {return token::NOFUNCTIONS;} irf {return token::IRF;} hp_filter {return token::HP_FILTER;} hp_ngrid {return token::HP_NGRID;} simul_seed {return token::SIMUL_SEED;} qz_criterium {return token::QZ_CRITERIUM;} simul {return token::SIMUL;} xls_sheet {return token::XLS_SHEET;} xls_range {return token::XLS_RANGE;} mh_recover {return token::MH_RECOVER;} planner_discount {return token::PLANNER_DISCOUNT;} labels {return token::LABELS;} equation {return token::EQUATION;} exclusion {return token::EXCLUSION;} lag {return token::LAG;} upper_cholesky {return token::UPPER_CHOLESKY;} lower_cholesky {return token::LOWER_CHOLESKY;} chain {return token::CHAIN;} state {return token::STATE;} number_of_states {return token::NUMBER_OF_STATES;} duration {return token::DURATION;} coefficients {return token::COEFFICIENTS;} variances {return token::VARIANCES;} constants {return token::CONSTANTS;} equations {return token::EQUATIONS;} [\.] {return Dynare::parser::token_type (yytext[0]);} [\\] {return Dynare::parser::token_type (yytext[0]);} [\'] {return Dynare::parser::token_type (yytext[0]);} use_dll {return token::USE_DLL;} block {return token::BLOCK;} bytecode {return token::BYTECODE;} no_static {return token::NO_STATIC;} linear {return token::LINEAR;} [,] {return token::COMMA;} [:] {return Dynare::parser::token_type (yytext[0]);} [\(\)] {return Dynare::parser::token_type (yytext[0]);} [\[] {return Dynare::parser::token_type (yytext[0]);} [\]] { if (sigma_e) sigma_e = 0; return Dynare::parser::token_type (yytext[0]); } [+] {return token::PLUS;} [-] {return token::MINUS;} [*] {return token::TIMES;} [/] {return token::DIVIDE;} [=] {return token::EQUAL;} [<] {return token::LESS;} [>] {return token::GREATER;} ">=" {return token::GREATER_EQUAL;} "<=" {return token::LESS_EQUAL;} "==" {return token::EQUAL_EQUAL;} "!=" {return token::EXCLAMATION_EQUAL;} [\^] {return token::POWER;} exp {return token::EXP;} log {return token::LOG;} log10 {return token::LOG10;} ln {return token::LN;} sin {return token::SIN;} cos {return token::COS;} tan {return token::TAN;} asin {return token::ASIN;} acos {return token::ACOS;} atan {return token::ATAN;} sinh {return token::SINH;} cosh {return token::COSH;} tanh {return token::TANH;} asinh {return token::ASINH;} acosh {return token::ACOSH;} atanh {return token::ATANH;} sqrt {return token::SQRT;} max {return token::MAX;} min {return token::MIN;} normcdf {return token::NORMCDF;} normpdf {return token::NORMPDF;} erf {return token::ERF;} steady_state {return token::STEADY_STATE;} expectation {return token::EXPECTATION;} varobs {return token::VAROBS;} full {return token::FULL;} nan {return token::NAN_CONSTANT;} inf {return token::INF_CONSTANT;} /* options for GSA module by Marco Ratto */ identification {return token::IDENTIFICATION;} morris {return token::MORRIS;} stab {return token::STAB;} redform {return token::REDFORM;} pprior {return token::PPRIOR;} prior_range {return token::PRIOR_RANGE;} ppost {return token::PPOST;} ilptau {return token::ILPTAU;} glue {return token::GLUE;} morris_nliv {return token::MORRIS_NLIV;} morris_ntra {return token::MORRIS_NTRA;} Nsam {return token::NSAM;} load_redform {return token::LOAD_REDFORM;} load_rmse {return token::LOAD_RMSE;} load_stab {return token::LOAD_STAB;} alpha2_stab {return token::ALPHA2_STAB;} ksstat {return token::KSSTAT;} logtrans_redform {return token::LOGTRANS_REDFORM;} threshold_redform {return token::THRESHOLD_REDFORM;} ksstat_redform {return token::KSSTAT_REDFORM;} alpha2_redform {return token::ALPHA2_REDFORM;} namendo {return token::NAMENDO;} namlagendo {return token::NAMLAGENDO;} namexo {return token::NAMEXO;} rmse {return token::RMSE;} lik_only {return token::LIK_ONLY;} var_rmse {return token::VAR_RMSE;} pfilt_rmse {return token::PFILT_RMSE;} istart_rmse {return token::ISTART_RMSE;} alpha_rmse {return token::ALPHA_RMSE;} alpha2_rmse {return token::ALPHA2_RMSE;} trans_ident {return token::TRANS_IDENT;} load_ident_files {return token::LOAD_IDENT_FILES;} useautocorr {return token::USEAUTOCORR;} /* end of GSA options */ /* For identification() statement */ prior_mc {return token::PRIOR_MC;} [A-Za-z_][A-Za-z0-9_]* { yylval->string_val = new string(yytext); return token::NAME; } ((([0-9]*\.[0-9]+)|([0-9]+\.))([edED][-+]?[0-9]+)?)|([0-9]+[edED][-+]?[0-9]+) { yylval->string_val = new string(yytext); return token::FLOAT_NUMBER; } [0-9]+ { yylval->string_val = new string(yytext); return token::INT_NUMBER; } \'[^\']+\' { yylval->string_val = new string(yytext + 1); yylval->string_val->resize(yylval->string_val->length() - 1); return token::QUOTED_STRING; } /* An instruction starting with a recognized symbol (which is not a modfile local or an external function) is passed as NAME, otherwise it is a native statement until the end of the line. We exclude modfile local vars because the user may want to modify their value using a Matlab assignment statement. We also exclude external functions because the user may have used a Matlab matrix element in initval (in which case Dynare recognizes the matrix name as an external function symbol), and may want to modify the matrix later with Matlab statements. */ [A-Za-z_][A-Za-z0-9_]* { if (driver.symbol_exists_and_is_not_modfile_local_or_external_function(yytext)) { BEGIN DYNARE_STATEMENT; yylval->string_val = new string(yytext); return token::NAME; } else { /* Enter a native block */ BEGIN NATIVE; yyless(0); } } /* Enter a native block */ . { BEGIN NATIVE; yyless(0); } /* Add the native statement */ { [^/%*\n\.]* | \.{1,2} | "*" | "/" { yymore(); eofbuff = string(yytext); } \.{3,}[[:space:]]*\n { driver.add_native_remove_charset(yytext, "\n"); } \n { if (strlen(yytext) > 1) driver.add_native_remove_charset(yytext, "\n"); BEGIN INITIAL; } <> { driver.add_native(eofbuff); yyterminate(); } \.{3,}[[:space:]]*"%".*\n | "%"[^\n]* { driver.add_native_remove_charset(yytext, "%"); } \.{3,}[[:space:]]*"//".*\n | "//"[^\n]* { driver.add_native_remove_charset(yytext, "//"); } \.{3,}[[:space:]]*"/*" { driver.add_native_remove_charset(yytext, "/*"); BEGIN NATIVE_COMMENT; } "/*" { driver.add_native_remove_charset(yytext, "/*"); comment_caller = NATIVE; BEGIN COMMENT; } } "*/"[[:space:]]*\n { BEGIN NATIVE; } . <> { yyterminate(); } <*>. { driver.error(*yylloc, "character unrecognized by lexer"); } %% DynareFlex::DynareFlex(istream* in, ostream* out) : DynareFlexLexer(in, out) { } void DynareFlex::location_increment(Dynare::parser::location_type *yylloc, const char *yytext) { while (*yytext != 0) if (*yytext++ == '\n') yylloc->lines(1); else yylloc->columns(1); } /* This implementation of DynareFlexLexer::yylex() is required to fill the * vtable of the class DynareFlexLexer. We define the scanner's main yylex * function via YY_DECL to reside in the DynareFlex class instead. */ #ifdef yylex # undef yylex #endif int DynareFlexLexer::yylex() { cerr << "DynareFlexLexer::yylex() has been called, that should never happen!" << endl; exit(EXIT_FAILURE); } /* Local variables: mode: C++ End: */