/*
* Copyright (C) 2003-2018 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 VERBATIM_BLOCK
%x NATIVE
%x NATIVE_COMMENT
%x DATES_STATEMENT
%x LINE1
%x LINE2
%x LINE3
%{
// Increments location counter for every token read
#define YY_USER_ACTION location_increment(yylloc, yytext);
%}
DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2]))
%%
/* 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;}
trend_var {BEGIN DYNARE_STATEMENT; return token::TREND_VAR;}
log_trend_var {BEGIN DYNARE_STATEMENT; return token::LOG_TREND_VAR;}
predetermined_variables {BEGIN DYNARE_STATEMENT; return token::PREDETERMINED_VARIABLES;}
parameters {BEGIN DYNARE_STATEMENT; return token::PARAMETERS;}
model_local_variable {BEGIN DYNARE_STATEMENT; return token::MODEL_LOCAL_VARIABLE;}
periods {BEGIN DYNARE_STATEMENT; return token::PERIODS;}
model_info {BEGIN DYNARE_STATEMENT; return token::MODEL_INFO;}
estimation {BEGIN DYNARE_STATEMENT; return token::ESTIMATION;}
var_estimation {BEGIN DYNARE_STATEMENT; return token::VAR_ESTIMATION;}
set_time {BEGIN DYNARE_STATEMENT; return token::SET_TIME;}
data {BEGIN DYNARE_STATEMENT; return token::DATA;}
varobs {BEGIN DYNARE_STATEMENT; return token::VAROBS;}
varexobs {BEGIN DYNARE_STATEMENT; return token::VAREXOBS;}
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;}
write_latex_original_model {BEGIN DYNARE_STATEMENT; return token::WRITE_LATEX_ORIGINAL_MODEL;}
write_latex_steady_state_model {BEGIN DYNARE_STATEMENT; return token::WRITE_LATEX_STEADY_STATE_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;}
var_model {BEGIN DYNARE_STATEMENT; return token::VAR_MODEL;}
dsample {BEGIN DYNARE_STATEMENT; return token::DSAMPLE;}
Sigma_e {BEGIN DYNARE_STATEMENT; sigma_e = 1; return token::SIGMA_E;}
planner_objective {BEGIN DYNARE_STATEMENT; return token::PLANNER_OBJECTIVE;}
ramsey_model {BEGIN DYNARE_STATEMENT; return token::RAMSEY_MODEL;}
ramsey_policy {BEGIN DYNARE_STATEMENT; return token::RAMSEY_POLICY;}
discretionary_policy {BEGIN DYNARE_STATEMENT; return token::DISCRETIONARY_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;}
histval_file {BEGIN DYNARE_STATEMENT; return token::HISTVAL_FILE;}
forecast {BEGIN DYNARE_STATEMENT; return token::FORECAST;}
shock_decomposition {BEGIN DYNARE_STATEMENT; return token::SHOCK_DECOMPOSITION;}
realtime_shock_decomposition {BEGIN DYNARE_STATEMENT; return token::REALTIME_SHOCK_DECOMPOSITION;}
plot_shock_decomposition {BEGIN DYNARE_STATEMENT; return token::PLOT_SHOCK_DECOMPOSITION;}
initial_condition_decomposition {BEGIN DYNARE_STATEMENT; return token::INITIAL_CONDITION_DECOMPOSITION;}
sbvar {BEGIN DYNARE_STATEMENT; return token::SBVAR;}
ms_estimation {BEGIN DYNARE_STATEMENT; return token::MS_ESTIMATION;}
ms_simulation {BEGIN DYNARE_STATEMENT; return token::MS_SIMULATION;}
ms_compute_mdd {BEGIN DYNARE_STATEMENT; return token::MS_COMPUTE_MDD;}
ms_compute_probabilities {BEGIN DYNARE_STATEMENT; return token::MS_COMPUTE_PROBABILITIES;}
ms_forecast {BEGIN DYNARE_STATEMENT; return token::MS_FORECAST;}
ms_irf {BEGIN DYNARE_STATEMENT; return token::MS_IRF;}
ms_variance_decomposition {BEGIN DYNARE_STATEMENT; return token::MS_VARIANCE_DECOMPOSITION;}
conditional_forecast {BEGIN DYNARE_STATEMENT; return token::CONDITIONAL_FORECAST;}
plot_conditional_forecast {BEGIN DYNARE_STATEMENT; return token::PLOT_CONDITIONAL_FORECAST;}
gmm_estimation {BEGIN DYNARE_STATEMENT; return token::GMM_ESTIMATION;}
smm_estimation {BEGIN DYNARE_STATEMENT; return token::SMM_ESTIMATION;}
markov_switching {BEGIN DYNARE_STATEMENT; return token::MARKOV_SWITCHING;}
svar {BEGIN DYNARE_STATEMENT; return token::SVAR;}
svar_global_identification_check {BEGIN DYNARE_STATEMENT; return token::SVAR_GLOBAL_IDENTIFICATION_CHECK;}
external_function {BEGIN DYNARE_STATEMENT; return token::EXTERNAL_FUNCTION;}
/* End of a Dynare statement */
calib_smoother { BEGIN DYNARE_STATEMENT; return token::CALIB_SMOOTHER; }
model_diagnostics {BEGIN DYNARE_STATEMENT; return token::MODEL_DIAGNOSTICS;}
extended_path {BEGIN DYNARE_STATEMENT; return token::EXTENDED_PATH;}
smoother2histval {BEGIN DYNARE_STATEMENT; return token::SMOOTHER2HISTVAL;}
perfect_foresight_setup {BEGIN DYNARE_STATEMENT; return token::PERFECT_FORESIGHT_SETUP;}
perfect_foresight_solver {BEGIN DYNARE_STATEMENT; return token::PERFECT_FORESIGHT_SOLVER;}
; {
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;}
shock_groups {BEGIN DYNARE_BLOCK; return token::SHOCK_GROUPS;}
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;}
osr_params_bounds {BEGIN DYNARE_BLOCK; return token::OSR_PARAMS_BOUNDS;}
observation_trends {BEGIN DYNARE_BLOCK; return token::OBSERVATION_TRENDS;}
optim_weights {BEGIN DYNARE_BLOCK; return token::OPTIM_WEIGHTS;}
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;}
moment_calibration {BEGIN DYNARE_BLOCK; return token::MOMENT_CALIBRATION;}
irf_calibration {BEGIN DYNARE_BLOCK; return token::IRF_CALIBRATION;}
ramsey_constraints {BEGIN DYNARE_BLOCK; return token::RAMSEY_CONSTRAINTS;}
restrictions {BEGIN DYNARE_BLOCK; return token::RESTRICTIONS;}
generate_irfs {BEGIN DYNARE_BLOCK; return token::GENERATE_IRFS;}
/* 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;}
subsamples {return token::SUBSAMPLES;}
options {return token::OPTIONS;}
prior {
yylval->string_val = new string(yytext);
return token::PRIOR;
}
std {BEGIN DYNARE_STATEMENT; return token::STD;}
corr {BEGIN DYNARE_STATEMENT; return token::CORR;}
function {return token::FUNCTION;}
sampling_draws {return token::SAMPLING_DRAWS;}
prior_function {BEGIN DYNARE_STATEMENT; return token::PRIOR_FUNCTION;}
posterior_function {BEGIN DYNARE_STATEMENT; return token::POSTERIOR_FUNCTION;}
/* Inside of a Dynare statement */
{DATE} {
char *yycopy = strdup(yytext);
char *uput = yycopy + yyleng;
unput(')');
unput('\'');
while (uput > yycopy)
unput(*--uput);
unput('\'');
unput('(');
unput('s');
unput('e');
unput('t');
unput('a');
unput('d');
free( yycopy );
}
${DATE} { yylloc->step();
#if (YY_FLEX_MAJOR_VERSION > 2) || (YY_FLEX_MAJOR_VERSION == 2 && YY_FLEX_MINOR_VERSION >= 6)
yyout << yytext + 1;
#else
*yyout << yytext + 1;
#endif
}
dates {dates_parens_nb=0; BEGIN DATES_STATEMENT; yylval->string_val = new string("dates");}
file {return token::FILE;}
datafile {return token::DATAFILE;}
dirname {return token::DIRNAME;}
nobs {return token::NOBS;}
last_obs {return token::LAST_OBS;}
first_obs {return token::FIRST_OBS;}
mean {return token::MEAN;}
stdev {return token::STDEV;}
truncate {return token::TRUNCATE;}
domain {return token::DOMAINN;}
variance {return token::VARIANCE;}
mode {return token::MODE;}
interval {return token::INTERVAL;}
shape {return token::SHAPE;}
shift {return token::SHIFT;}
bounds {return token::BOUNDS;}
init {return token::INIT;}
jscale {return token::JSCALE;}
prefilter {return token::PREFILTER;}
presample {return token::PRESAMPLE;}
lik_algo {return token::LIK_ALGO;}
lik_init {return token::LIK_INIT;}
taper_steps {return token::TAPER_STEPS;}
geweke_interval {return token::GEWEKE_INTERVAL;}
raftery_lewis_qrs {return token::RAFTERY_LEWIS_QRS;}
raftery_lewis_diagnostics {return token::RAFTERY_LEWIS_DIAGNOSTICS;}
graph {return token::GRAPH;}
nograph {return token::NOGRAPH;}
posterior_graph {return token::POSTERIOR_GRAPH;}
posterior_nograph {return token::POSTERIOR_NOGRAPH;}
nodisplay {return token::NODISPLAY;}
graph_format {return token::GRAPH_FORMAT;}
eps {yylval->string_val = new string(yytext); return token::EPS;}
pdf {yylval->string_val = new string(yytext); return token::PDF;}
fig {yylval->string_val = new string(yytext); return token::FIG;}
none {yylval->string_val = new string(yytext); return token::NONE;}
print {return token::PRINT;}
noprint {return token::NOPRINT;}
conf_sig {return token::CONF_SIG;}
mh_conf_sig {return token::MH_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;}
mode_check_neighbourhood_size {return token::MODE_CHECK_NEIGHBOURHOOD_SIZE;}
mode_check_symmetric_plots {return token::MODE_CHECK_SYMMETRIC_PLOTS;}
mode_check_number_of_points {return token::MODE_CHECK_NUMBER_OF_POINTS;}
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;}
load_results_after_load_mh {return token::LOAD_RESULTS_AFTER_LOAD_MH;}
loglinear {return token::LOGLINEAR;}
linear_approximation {return token::LINEAR_APPROXIMATION;}
logdata {return token::LOGDATA;}
nodiagnostic {return token::NODIAGNOSTIC;}
kalman_algo {return token::KALMAN_ALGO;}
fast_kalman_filter {return token::FAST_KALMAN_FILTER;}
kalman_tol {return token::KALMAN_TOL;}
diffuse_kalman_tol {return token::DIFFUSE_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;}
contemporaneous_correlation {return token::CONTEMPORANEOUS_CORRELATION;}
posterior_max_subsample_draws {return token::POSTERIOR_MAX_SUBSAMPLE_DRAWS;}
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;}
std {return token::STD;}
corr {return token::CORR;}
nocorr {return token::NOCORR;}
optim {return token::OPTIM;}
periods {return token::PERIODS;}
model_name {return token::MODEL_NAME;}
endogenous_terminal_period {return token::ENDOGENOUS_TERMINAL_PERIOD;}
sub_draws {return token::SUB_DRAWS;}
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;}
monthly {return token::MONTHLY; }
quarterly {return token::QUARTERLY; }
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;}
vlistlog {return token::VLISTLOG;}
vlistper {return token::VLISTPER;}
keep_kalman_algo_if_singularity_is_detected {return token::KEEP_KALMAN_ALGO_IF_SINGULARITY_IS_DETECTED;}
restriction_fname {return token::RESTRICTION_FNAME;}
nlags {return token::NLAGS;}
restrictions {return token::RESTRICTIONS;}
crossequations {return token::CROSSEQUATIONS;}
covariance {return token::COVARIANCE;}
adl {return token::ADL;}
diff {return token::DIFF;}
cross_restrictions {return token::CROSS_RESTRICTIONS;}
contemp_reduced_form {return token::CONTEMP_REDUCED_FORM;}
real_pseudo_forecast {return token::REAL_PSEUDO_FORECAST;}
no_bayesian_prior {return token::NO_BAYESIAN_PRIOR;}
dummy_obs {return token::DUMMY_OBS;}
spectral_density {return token::SPECTRAL_DENSITY;}
nstates {return token::NSTATES;}
indxscalesstates {return token::INDXSCALESSTATES;}
fixed_point {return token::FIXED_POINT;}
doubling {return token::DOUBLING;}