%x incl
%x lyrics
%x longcomment
+%x maininput
%x markup
%x notes
%x quote
start_main_input ();
main_input_level_ = include_stack_.size ();
is_main_input_ = true;
+ int state = YYSTATE;
+ yy_push_state (maininput);
+ yy_push_state (state);
}
else
error (_ ("\\maininput not allowed outside init files"));
<longcomment><<EOF>> {
LexerError (_ ("EOF found inside a comment").c_str ());
- is_main_input_ = false; // should be safe , can't have \include in --safe.
- yylval = SCM_UNSPECIFIED;
- if (!close_input ())
- yyterminate (); // can't move this, since it actually rets a YY_NULL
+ yy_pop_state ();
}
+<quote><<EOF>> {
+ LexerError (_ ("EOF found inside string").c_str ());
+ yy_pop_state ();
+}
+
<<EOF>> {
yylval = SCM_UNSPECIFIED;
if (is_main_input_)
{
is_main_input_ = include_stack_.size () > main_input_level_;
if (!is_main_input_)
+ {
main_input_level_ = 0;
+ pop_state ();
+ if (YYSTATE != maininput)
+ {
+ LexerError (_ ("Unfinished main input").c_str ());
+ do {
+ pop_state ();
+ } while (YYSTATE != maininput);
+ }
+ pop_state ();
+ }
if (!close_input () || !is_main_input_)
/* Returns YY_NULL */
yyterminate ();
yyterminate ();
}
+<maininput>. {
+ while (include_stack_.size () > main_input_level_
+ && close_input ())
+ ;
+ yyterminate ();
+}
+
<INITIAL>{
{WORD}/[-_] | // backup rule
{WORD} {