+function_arglist_closed_optional:
+ function_arglist_closed_keep %prec FUNCTION_ARGUMENTS
+ | EXPECT_OPTIONAL EXPECT_MUSIC function_arglist_closed_optional
+ {
+ $$ = scm_cons (loc_on_music (@3, $1), $3);
+ }
+ | EXPECT_OPTIONAL EXPECT_PITCH function_arglist_closed_optional
+ {
+ $$ = scm_cons ($1, $3);
+ }
+ | EXPECT_OPTIONAL EXPECT_DURATION function_arglist_closed_optional
+ {
+ $$ = scm_cons ($1, $3);
+ }
+ | EXPECT_OPTIONAL EXPECT_MARKUP function_arglist_closed_optional
+ {
+ $$ = scm_cons ($1, $3);
+ }
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_optional
+ {
+ $$ = scm_cons (loc_on_music (@3, $1), $3);
+ }
+ ;
+
+function_arglist_closed_keep:
+ EXPECT_OPTIONAL EXPECT_MARKUP function_arglist_keep full_markup {
+ $$ = scm_cons ($4, $3);
+ }
+ | EXPECT_OPTIONAL EXPECT_MARKUP function_arglist_keep simple_string {
+ $$ = scm_cons ($4, $3);
+ }
+ | EXPECT_OPTIONAL EXPECT_PITCH function_arglist_keep pitch_also_in_chords {
+ $$ = scm_cons ($4, $3);
+ }
+ | EXPECT_OPTIONAL EXPECT_DURATION function_arglist_closed_keep duration_length {
+ $$ = scm_cons ($4, $3);
+ }
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_keep simple_string
+ {
+ $$ = check_scheme_arg (PARSER, @4, $1, $4, $3, $2);
+ }
+ | EXPECT_OPTIONAL EXPECT_MUSIC function_arglist_keep closed_music
+ {
+ $$ = scm_cons ($4, $3);
+ }
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_keep embedded_scm_closed
+ {
+ $$ = check_scheme_arg (PARSER, @4, $1, $4, $3, $2);
+ }
+ | function_arglist_closed
+ ;
+
+embedded_scm_closed:
+ embedded_scm_bare
+ | scm_function_call_closed
+ ;
+
+scm_function_call_closed:
+ SCM_FUNCTION function_arglist_closed {
+ $$ = run_music_function (PARSER, @$,
+ $1, $2);
+ }
+ ;
+
+function_arglist_bare:
+ EXPECT_NO_MORE_ARGS {