diff --git a/DynareBison.yy b/DynareBison.yy index 5cc425fc89b92ed8733f87212d7b7b7bd8907c17..678e3ce4fdc935cbdb901e7037a2af32bdfad030 100644 --- a/DynareBison.yy +++ b/DynareBison.yy @@ -154,6 +154,9 @@ class ParsingDriver; %token MHM_FILE OUTPUT_FILE_TAG DRAWS_NBR_BURN_IN_1 DRAWS_NBR_BURN_IN_2 DRAWS_NBR_MEAN_VAR_ESTIMATE %token DRAWS_NBR_MODIFIED_HARMONIC_MEAN DIRICHLET_SCALE %token SBVAR MS_SBVAR +%token SVAR_IDENTIFICATION EQUATION EXCLUSION LAG UPPER_CHOLESKY LOWER_CHOLESKY +%token MARKOV_SWITCHING CHAIN STATE DURATION NUMBER_OF_STATES +%token SVAR COEFFICIENTS VARIANCES CONSTANTS %type <node_val> expression expression_or_empty %type <node_val> equation hand_side model_var @@ -231,6 +234,9 @@ statement : parameters | conditional_forecast | conditional_forecast_paths | plot_conditional_forecast + | svar_identification + | markov_switching + | svar ; dsample : DSAMPLE INT_NUMBER ';' @@ -591,6 +597,67 @@ det_shock_elem : VAR symbol ';' PERIODS period_list ';' VALUES value_list ';' { driver.add_det_shock($2, false); } ; +svar_identification : SVAR_IDENTIFICATION ';' svar_identification_list END + { ;} + ; + +svar_identification_list : svar_exclusion_list + { ;} + | UPPER_CHOLESKY ';' + { ;} + | LOWER_CHOLESKY ';' + { ;} + ; + +svar_exclusion_list : svar_exclusion_list svar_exclusion_elem + | svar_exclusion_elem + ; + +svar_exclusion_elem : EXCLUSION LAG INT_NUMBER ';' svar_equation_list + { ;} + ; + +svar_equation_list : svar_equation_list EQUATION INT_NUMBER COMMA svar_var_list ';' + { ;} + | EQUATION INT_NUMBER COMMA svar_var_list ';' + { ;} + ; + +svar_var_list : svar_var_list COMMA symbol + { ;} + | symbol + { ;} + ; + +markov_switching : MARKOV_SWITCHING '(' ms_options_list ')' ';' + { ;} + ; + +ms_options_list : ms_options_list COMMA ms_options + | ms_options + ; + +ms_options : o_chain + | o_state + | o_duration + | o_number_of_states + ; + +svar : SVAR '(' svar_options_list ')' ';' + { ;} + ; + +svar_options_list : svar_options_list COMMA svar_options + | svar_options + ; + +svar_options : o_coefficients + | o_variances + | o_constants + | o_equation + | o_chain + ; + mshocks : MSHOCKS ';' mshock_list END { driver.end_mshocks(); }; mshock_list : mshock_list det_shock_elem @@ -1792,6 +1859,23 @@ o_draws_nbr_mean_var_estimate : DRAWS_NBR_MEAN_VAR_ESTIMATE EQUAL INT_NUMBER {dr o_draws_nbr_modified_harmonic_mean : DRAWS_NBR_MODIFIED_HARMONIC_MEAN EQUAL INT_NUMBER {driver.option_num("ms.draws_nbr_modified_harmonic_mean",$3); }; o_dirichlet_scale : DIRICHLET_SCALE EQUAL INT_NUMBER {driver.option_num("ms.dirichlet_scale",$3); }; +o_chain : CHAIN EQUAL INT_NUMBER { ;}; +o_state : STATE EQUAL INT_NUMBER { ;}; +o_duration : DURATION EQUAL number + { ;} + | DURATION EQUAL INF_CONSTANT + { ;} + ; +o_number_of_states : NUMBER_OF_STATES EQUAL INT_NUMBER { ;}; +o_coefficients : COEFFICIENTS { ;}; +o_variances : VARIANCES { ;}; +o_constants : CONSTANTS { ;}; +o_equation : EQUATION EQUAL vec_int + { ; } + | EQUATION EQUAL INT_NUMBER + { ; } + ; + range : symbol ':' symbol { $1->append(":"); diff --git a/DynareFlex.ll b/DynareFlex.ll index d91c0e119437328cfc27a583f9d5d9051f03e6e1..ba0560ee71bb94f589b08713d7fea14cc248c39a 100644 --- a/DynareFlex.ll +++ b/DynareFlex.ll @@ -17,6 +17,7 @@ * along with Dynare. If not, see <http://www.gnu.org/licenses/>. */ + %{ using namespace std; @@ -140,6 +141,9 @@ int sigma_e = 0; <INITIAL>ms_sbvar {BEGIN DYNARE_STATEMENT; return token::MS_SBVAR;} <INITIAL>conditional_forecast {BEGIN DYNARE_STATEMENT; return token::CONDITIONAL_FORECAST;} <INITIAL>plot_conditional_forecast {BEGIN DYNARE_STATEMENT; return token::PLOT_CONDITIONAL_FORECAST;} + +<INITIAL>markov_switching {BEGIN DYNARE_STATEMENT; return token::MARKOV_SWITCHING;} +<INITIAL>svar {BEGIN DYNARE_STATEMENT; return token::SVAR;} /* End of a Dynare statement */ <DYNARE_STATEMENT>; { @@ -166,7 +170,7 @@ int sigma_e = 0; <INITIAL>calib_var {BEGIN DYNARE_BLOCK; return token::CALIB_VAR;} <INITIAL>homotopy_setup {BEGIN DYNARE_BLOCK; return token::HOMOTOPY_SETUP;} <INITIAL>conditional_forecast_paths {BEGIN DYNARE_BLOCK; return token::CONDITIONAL_FORECAST_PATHS;} - +<INITIAL>svar_identification {BEGIN DYNARE_BLOCK; return token::SVAR_IDENTIFICATION;} /* End of a Dynare block */ <DYNARE_BLOCK>end[ \t\n]*; {BEGIN INITIAL; return token::END;} @@ -390,6 +394,19 @@ int sigma_e = 0; <DYNARE_STATEMENT>planner_discount {return token::PLANNER_DISCOUNT;} <DYNARE_STATEMENT>labels {return token::LABELS;} +<DYNARE_STATEMENT,DYNARE_BLOCK>equation {return token::EQUATION;} +<DYNARE_BLOCK>exclusion {return token::EXCLUSION;} +<DYNARE_BLOCK>lag {return token::LAG;} +<DYNARE_BLOCK>upper_cholesky {return token::UPPER_CHOLESKY;} +<DYNARE_BLOCK>lower_cholesky {return token::LOWER_CHOLESKY;} +<DYNARE_STATEMENT>chain {return token::CHAIN;} +<DYNARE_STATEMENT>state {return token::STATE;} +<DYNARE_STATEMENT>number_of_states {return token::NUMBER_OF_STATES;} +<DYNARE_STATEMENT>duration {return token::DURATION;} +<DYNARE_STATEMENT>coefficients {return token::COEFFICIENTS;} +<DYNARE_STATEMENT>variances {return token::VARIANCES;} +<DYNARE_STATEMENT>constants {return token::CONSTANTS;} + <DYNARE_STATEMENT>[\.] {return Dynare::parser::token_type (yytext[0]);} <DYNARE_STATEMENT>[\\] {return Dynare::parser::token_type (yytext[0]);} <DYNARE_STATEMENT>[\'] {return Dynare::parser::token_type (yytext[0]);}