blob: b7b842e096076035c78c37275591a43f0efdd87e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
; This file documents the custom formal grammar used for the sheet.
;
; This grammar is subject to changes in the future, by the way.
; The sheet consists of a sequence of blocks, or if there is only one
; block, a sequence of groups.
sheet = 1*block / 1* group
; A block consists of a sequence of groups enclosed in curly braces.
block = "{" 1*group "}"
; A group either has several units enclosed in patentheses or one unit
; alone.
group = "(" 1*unit ")" cram-repetition / unit
; A unit is either an instruction or a note.
unit = instruction / note
; An instruction is either a volume changing one, a bpm changing one,
; or an instrument changing one.
instruction = "i" ( volume / bpm / instrument )
; A volume changing instruction follows "v"
volume = "v" 1*DIGIT *1("." 1*DIGIT)
; A bpm changing instruction is similar to a volume changing
; instruction.
bpm = "b" 1*DIGIT
; An instrument changing instruction follows "i"
instrument = "i" ( "piano" / "violin" )
; A note has three parts: octave, tone, and duration.
note = *1octave tone *1duration
octave = "o" 1*DIGIT
tone = ( "a" / "b" / "c" / "d" "e" / "f" / "g" ) *tone-shift
; Shifts the tone by some number of semitones
tone-shift = "+" / "-"
; A duration is either in the standard sheet notation or a precise
; duration.
;
; There are no overlaps between the two variants.
duration = 1*DIGIT *"." / "p" 1*DIGIT *1("." 1* DIGIT)
cram-repetition = *1cram *1repetition
cram = duration
repetition = "*" 1*DIGIT
|