/* PSPP - a program for statistical analysis.
- Copyright (C) 2009, 2010, 2011, 2012, 2014 Free Software Foundation, Inc.
+ Copyright (C) 2009, 2010, 2011, 2012, 2014, 2015, 2016 Free Software Foundation, Inc.
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
{
lex_match (lexer, T_SLASH);
- if (lex_match_id (lexer, "PLOT"))
+ if (lex_match_id (lexer, "ANALYSIS"))
+ {
+ struct const_var_set *vs;
+ const struct variable **vars;
+ size_t n_vars;
+ bool ok;
+
+ lex_match (lexer, T_EQUALS);
+
+ vs = const_var_set_create_from_array (factor.vars, factor.n_vars);
+ ok = parse_const_var_set_vars (lexer, vs, &vars, &n_vars,
+ PV_NO_DUPLICATE | PV_NUMERIC);
+ const_var_set_destroy (vs);
+
+ if (!ok)
+ goto error;
+
+ free (factor.vars);
+ factor.vars = vars;
+ factor.n_vars = n_vars;
+ }
+ else if (lex_match_id (lexer, "PLOT"))
{
lex_match (lexer, T_EQUALS);
while (lex_token (lexer) != T_ENDCMD && lex_token (lexer) != T_SLASH)
else if (lex_match_id (lexer, "PROMAX"))
{
factor.promax_power = 5;
- if (lex_match (lexer, T_LPAREN))
+ if (lex_match (lexer, T_LPAREN)
+ && lex_force_int (lexer))
{
- lex_force_int (lexer);
factor.promax_power = lex_integer (lexer);
lex_get (lexer);
lex_force_match (lexer, T_RPAREN);
{
if (lex_match_id (lexer, "FACTORS"))
{
- if ( lex_force_match (lexer, T_LPAREN))
+ if ( lex_force_match (lexer, T_LPAREN)
+ && lex_force_int (lexer))
{
- lex_force_int (lexer);
factor.n_factors = lex_integer (lexer);
lex_get (lexer);
lex_force_match (lexer, T_RPAREN);
}
else if (lex_match_id (lexer, "MINEIGEN"))
{
- if ( lex_force_match (lexer, T_LPAREN))
+ if ( lex_force_match (lexer, T_LPAREN)
+ && lex_force_num (lexer))
{
- lex_force_num (lexer);
factor.min_eigen = lex_number (lexer);
lex_get (lexer);
lex_force_match (lexer, T_RPAREN);
}
else if (lex_match_id (lexer, "ECONVERGE"))
{
- if ( lex_force_match (lexer, T_LPAREN))
+ if ( lex_force_match (lexer, T_LPAREN)
+ && lex_force_num (lexer))
{
- lex_force_num (lexer);
factor.econverge = lex_number (lexer);
lex_get (lexer);
lex_force_match (lexer, T_RPAREN);
}
}
else if (lex_match_id (lexer, "RCONVERGE"))
- {
- if ( lex_force_match (lexer, T_LPAREN))
- {
- lex_force_num (lexer);
- factor.rconverge = lex_number (lexer);
- lex_get (lexer);
- lex_force_match (lexer, T_RPAREN);
- }
+ {
+ if (lex_force_match (lexer, T_LPAREN)
+ && lex_force_num (lexer))
+ {
+ factor.rconverge = lex_number (lexer);
+ lex_get (lexer);
+ lex_force_match (lexer, T_RPAREN);
+ }
}
else if (lex_match_id (lexer, "ITERATE"))
{
- if ( lex_force_match (lexer, T_LPAREN))
+ if ( lex_force_match (lexer, T_LPAREN)
+ && lex_force_int (lexer))
{
- lex_force_int (lexer);
n_iterations = lex_integer (lexer);
lex_get (lexer);
lex_force_match (lexer, T_RPAREN);
}
else if (lex_match_id (lexer, "BLANK"))
{
- if ( lex_force_match (lexer, T_LPAREN))
+ if ( lex_force_match (lexer, T_LPAREN)
+ && lex_force_num (lexer))
{
- lex_force_num (lexer);
factor.blank = lex_number (lexer);
lex_get (lexer);
lex_force_match (lexer, T_RPAREN);