/*
- parser.yy -- Bison/C++ parser for LilyPond
+ This file is part of LilyPond, the GNU music typesetter.
- source file of the GNU LilyPond music typesetter
-
- (c) 1997--2009 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2010 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
+
+ LilyPond is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ LilyPond is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
*/
%{
assignment:
assignment_id '=' identifier_init {
PARSER->lexer_->set_identifier ($1, $3);
-
+ }
+ | assignment_id property_path '=' identifier_init {
+ SCM path = scm_cons (scm_string_to_symbol ($1), $2);
+ PARSER->lexer_->set_identifier (path, $4);
+ ;
/*
TODO: devise standard for protection in parser.
;
simple_music:
- event_chord {
- PARSER->lexer_->chord_repetition_.last_chord_ = $$;
- }
+ event_chord
| MUSIC_IDENTIFIER
| music_property_def
| context_change
$$ = scm_list_2 (ly_symbol2scm ("unset"),
scm_string_to_symbol ($2));
}
- | OVERRIDE simple_string property_path '=' embedded_scm {
+ | OVERRIDE simple_string property_path '=' scalar {
$$ = scm_append (scm_list_2 (scm_list_3 (ly_symbol2scm ("push"),
scm_string_to_symbol ($2), $5),
$3));
| context_def_mod STRING {
$$ = scm_list_2 ($1, $2);
}
+ | context_def_mod embedded_scm {
+ if (ly_symbol2scm ("consists") != $1)
+ {
+ $$ = SCM_EOL;
+ PARSER->parser_error (@1, _ ("only \\consists takes non-string argument."));
+ }
+ else
+ {
+ $$ = scm_list_2 ($1, $2);
+ }
+ }
;
context_prop_spec:
$$ = MAKE_SYNTAX ("multi-measure-rest", i, $2, $3);
}
| command_element
- | note_chord_element
+ /* note chord elements are memorized into
+ PARSER->lexer_->chord_repetition_ so that the chord repetition
+ mechanism copy them when a chord repetition symbol is found
+ */
+ | note_chord_element {
+ PARSER->lexer_->chord_repetition_.last_chord_ = $$;
+ }
;