\repeat { \repeat } \alternative
*/
+%nonassoc COMPOSITE
+%left ADDLYRICS
+
+ /* ADDLYRICS needs to have lower precedence than FUNCTION_ARGUMENTS,
+ * or we won't be able to tell music apart from closed_music without
+ * lookahead in the context of function calls.
+ */
+
%right FUNCTION_ARGUMENTS
MARKUP LYRICS_STRING MARKUP_IDENTIFIER STRING STRING_IDENTIFIER
MARKUPLIST WITH CONTEXT_MOD_IDENTIFIER MARKUPLIST_IDENTIFIER
/* The above are the symbols that can start function arguments */
-%left ADDLYRICS
%left PREC_TOP
%token <i> E_UNSIGNED
-%token <i> UNSIGNED
+%token <scm> UNSIGNED
/* Artificial tokens, for more generic function syntax */
%token <i> EXPECT_MARKUP "markup?"
music:
simple_music
- | composite_music %prec FUNCTION_ARGUMENTS
+ | composite_music %prec COMPOSITE
;
re_rhythmed_music:
composite_music new_lyrics {
$$ = MAKE_SYNTAX ("add-lyrics", @$, $1, scm_reverse_x ($2, SCM_EOL));
- } %prec FUNCTION_ARGUMENTS
+ } %prec COMPOSITE
| LYRICSTO simple_string {
PARSER->lexer_->push_lyric_state ();
} music {
fingering:
UNSIGNED {
Music *t = MY_MAKE_MUSIC ("FingeringEvent", @$);
- t->set_property ("digit", scm_from_int ($1));
+ t->set_property ("digit", $1);
$$ = t->unprotect ();
}
;
fraction:
FRACTION { $$ = $1; }
| UNSIGNED '/' UNSIGNED {
- $$ = scm_cons (scm_from_int ($1), scm_from_int ($3));
+ $$ = scm_cons ($1, $3);
}
;
;
bass_number:
- UNSIGNED {
- $$ = scm_from_int ($1);
- }
+ UNSIGNED { $$ = $1; }
| STRING { $$ = $1; }
| full_markup { $$ = $1; }
;
bare_number:
UNSIGNED {
- $$ = scm_from_int ($1);
+ $$ = $1;
}
| REAL {
$$ = $1;
| REAL NUMBER_IDENTIFIER {
$$ = scm_from_double (scm_to_double ($1) *scm_to_double ($2));
}
- | UNSIGNED NUMBER_IDENTIFIER {
+ | bare_unsigned NUMBER_IDENTIFIER {
$$ = scm_from_double ($1 *scm_to_double ($2));
}
;
bare_unsigned:
UNSIGNED {
- $$ = $1;
+ $$ = scm_to_int ($1);
}
;
unsigned_number:
- bare_unsigned { $$ = scm_from_int ($1); }
- | NUMBER_IDENTIFIER {
- $$ = $1;
- }
+ UNSIGNED
+ | NUMBER_IDENTIFIER
;
exclamations: