+ size_t n_matched;
+ if (!lex_ofs_at_phrase__ (lexer, lex_ofs (lexer), s, &n_matched))
+ return false;
+ lex_get_n (lexer, n_matched);
+ return true;
+}
+
+/* If LEXER is positioned at the sequence of tokens that may be parsed from S,
+ skips it and returns true. Otherwise, issues an error and returns false.
+
+ S may consist of an arbitrary sequence of tokens, e.g. "KRUSKAL-WALLIS",
+ "2SLS", or "END INPUT PROGRAM". Identifiers may be abbreviated to their
+ first three letters. */
+bool
+lex_force_match_phrase (struct lexer *lexer, const char *s)
+{
+ size_t n_matched;
+ bool ok = lex_ofs_at_phrase__ (lexer, lex_ofs (lexer), s, &n_matched);
+ if (ok)
+ lex_get_n (lexer, n_matched);
+ else
+ lex_next_error (lexer, 0, n_matched, _("Syntax error expecting `%s'."), s);
+ return ok;