1 %{ // -*-Fundamental-*-
10 #include "scommands.hh"
12 #include "parseconstruct.hh"
14 #include "identifier.hh"
27 Score_commands *scommands;
38 %token VOICE STAFF SCORE TITLE RHYTHMSTAFF BAR NOTENAME OUTPUT
39 %token CM IN PT MM PAPER WIDTH METER UNITSPACE SKIP COMMANDS
43 %token <id> IDENTIFIER
44 %token <string> NEWIDENTIFIER
45 %token <string> PITCH DURATION RESTNAME
47 %token <string> STRING
48 %type <id> declaration
49 %type <paper> paper_block paper_body
51 %type <voice> voice_block voice_body voice_elts voice_elts_dollar
53 %type <command> score_command
54 %type <score> score_block score_body
55 %type <staff> staff_block rhythmstaff_block rhythmstaff_body
56 %type <staff> melodicstaff_block melodicstaff_body staffdecl
58 %type <scommands> score_commands_block score_commands_body
63 | mudela score_block {
66 | mudela add_declaration { }
69 add_declaration: declaration {
75 NEWIDENTIFIER '=' staff_block {
76 $$ = new Staff_id(*$1, $3);
77 delete $1; // this sux
82 score_block: SCORE '{' score_body '}' { $$ = $3; }
85 score_body: { $$ = new Score; }
86 | score_body staff_block { $$->add($2); }
87 | score_body score_commands_block { $$->set($2); }
88 | score_body paper_block { $$->set($2); }
91 COMMANDS '{' score_commands_body '}' { $$ =$3;}
94 score_commands_body: { $$ = new Score_commands; }
95 | score_commands_body score_command {
101 PAPER '{' paper_body '}' { $$ = $3; }
105 /* empty */ { $$ = new Paperdef; }
106 | paper_body WIDTH dim { $$->linewidth = $3;}
107 | paper_body OUTPUT STRING { $$->outfile = *$3;
110 | paper_body UNITSPACE dim { $$->whole_width = $3; }
114 REAL unit { $$ = convert_dimen($1,$2); }
118 unit: CM { $$ = "cm"; }
133 staffdecl: STAFF '{' IDENTIFIER '}' { $$ = $3->staff(); }
137 RHYTHMSTAFF '{' rhythmstaff_body '}' { $$ = $3; }
141 /* empty */ { $$ = get_new_rhythmstaff(); }
142 | rhythmstaff_body voice_block { $$->add_voice($2); }
146 MELODICSTAFF '{' melodicstaff_body '}' { $$ = $3; }
150 /* empty */ { $$ = get_new_melodicstaff(); }
151 | melodicstaff_body voice_block { $$->add_voice($2); }
158 VOICE '{' voice_body '}' { $$ = $3; }
163 REAL voice_elts_dollar { $$ = $2; $$->start = $1; }
164 | voice_elts_dollar { $$ = $1; }
168 '$' voice_elts '$' { $$ = $2; }
175 | voice_elts voice_elt {
181 PITCH DURATION { $$ = get_note_element(*$1, *$2);
184 | RESTNAME DURATION { $$ = get_rest_element(*$1, *$2);
191 $$ = get_skip_command($2, $4);
194 $$ = get_meterchange_command($2, $3);
196 /* | PARTIALMEASURE REAL {
197 $$ = get_partial_command($2);
205 if (ABS($1-Real(int($$))) > 1e-8)
206 yyerror("expecting integer number");
216 *mlog << "Parsing ... ";
218 yydebug = !monitor.silence("Parser");