+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_keep '-' UNSIGNED
+ {
+ SCM n = scm_difference ($5, SCM_UNDEFINED);
+ if (scm_is_true (scm_call_1 ($2, n))) {
+ $$ = $3;
+ MYREPARSE (@5, $2, REAL, n);
+ } else {
+ Music *t = MY_MAKE_MUSIC ("FingeringEvent", @5);
+ t->set_property ("digit", $5);
+ $$ = t->unprotect ();
+ if (scm_is_true (scm_call_1 ($2, $$)))
+ $$ = scm_cons ($$, $3);
+ else {
+ $$ = scm_cons (loc_on_music (@3, $1), $3);
+ MYBACKUP (UNSIGNED, $5, @5);
+ parser->lexer_->push_extra_token ('-');
+ }
+ }
+
+ }
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_keep '-' REAL
+ {
+ SCM n = scm_difference ($5, SCM_UNDEFINED);
+ if (scm_is_true (scm_call_1 ($2, n))) {
+ MYREPARSE (@5, $2, REAL, n);
+ $$ = $3;
+ } else {
+ MYBACKUP (REAL, n, @5);
+ }
+ }
+ | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_keep '-' NUMBER_IDENTIFIER
+ {
+ SCM n = scm_difference ($5, SCM_UNDEFINED);
+ if (scm_is_true (scm_call_1 ($2, n))) {
+ $$ = scm_cons (n, $3);
+ } else {
+ MYBACKUP (NUMBER_IDENTIFIER, n, @5);
+ }
+ }
+ | 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_backup BACKUP
+ {
+ $$ = scm_cons ($1, $3);
+ MYBACKUP(0, SCM_UNDEFINED, @3);
+ }
+ | function_arglist_backup REPARSE embedded_scm_arg_closed
+ {
+ $$ = check_scheme_arg (parser, @3,
+ $3, $1, $2);
+ }
+ | function_arglist_backup REPARSE bare_number
+ {
+ $$ = check_scheme_arg (parser, @3,
+ $3, $1, $2);
+ }
+ | function_arglist_backup REPARSE fraction
+ {
+ $$ = check_scheme_arg (parser, @3,
+ $3, $1, $2);
+ }