%type <scm> braced_music_list
%type <scm> closed_music
%type <scm> music
-%type <scm> prefix_composite_music
+%type <scm> complex_music
+%type <scm> mode_changed_music
%type <scm> repeated_music
%type <scm> sequential_music
%type <scm> simple_music
%type <outputdef> output_def
%type <outputdef> paper_block
-%type <scm> generic_prefix_music_scm
+%type <scm> music_function_call
%type <scm> music_list
%type <scm> absolute_pitch
%type <scm> assignment_id
music:
simple_music
| composite_music
- | MUSIC_IDENTIFIER
;
;
composite_music:
- prefix_composite_music { $$ = $1; }
- | grouped_music_list { $$ = $1; }
+ complex_music
+ | closed_music
;
/* Music that can't be followed by additional events or durations */
closed_music:
- MUSIC_IDENTIFIER
+ mode_changed_music
+ | MUSIC_IDENTIFIER
| grouped_music_list
;
}
;
-generic_prefix_music_scm:
+music_function_call:
MUSIC_FUNCTION function_arglist {
$$ = run_music_function (PARSER, @$,
$1, $2);
}
;
-
-prefix_composite_music:
- generic_prefix_music_scm
+complex_music:
+ music_function_call
| CONTEXT simple_string optional_id optional_context_mod music {
Context_mod *ctxmod = unsmob_context_mod ($4);
SCM mods = SCM_EOL;
$$ = MAKE_SYNTAX ("time-scaled-music", @$, $2, $3);
}
| repeated_music { $$ = $1; }
- | mode_changing_head grouped_music_list {
+ | relative_music { $$ = $1; }
+ | re_rhythmed_music { $$ = $1; }
+ ;
+
+mode_changed_music:
+ mode_changing_head grouped_music_list {
if ($1 == ly_symbol2scm ("chords"))
{
$$ = MAKE_SYNTAX ("unrelativable-music", @$, $2);
}
PARSER->lexer_->pop_state ();
}
- | relative_music { $$ = $1; }
- | re_rhythmed_music { $$ = $1; }
;
mode_changing_head: