Changes In Branch feature/abc Through [029fd48614] Excluding Merge-Ins
This is equivalent to a diff from 843dabad43 to 029fd48614
2011-09-15
| ||
15:28 | Got the program to run through again. Now without the roman numerals check-in: 33ddc6fee4 user: brian tags: feature/abc | |
2011-09-13
| ||
20:08 | Added a name parameter to the Tree class that will prove helpful in generating the score check-in: 029fd48614 user: brian tags: feature/abc | |
20:02 | Changed parser to include nodes check-in: 18dba95a2e user: brian tags: feature/abc | |
18:29 | Create new branch named "feature/abc" check-in: 3833b59ec2 user: brian tags: feature/abc | |
2011-02-10
| ||
22:34 | Added lexical support for parens instead of quotes for chords, cleaned up the yacc parser, added lex tokens for syncopation check-in: 702d933446 user: brian@linux-85dd.site tags: master | |
2010-11-30
| ||
17:33 | This is what I submitted as my final piece for MUS 306 check-in: 843dabad43 user: spiffytech@gmail.com tags: master | |
06:22 | Added a timbre instrument, doubled the length of the piece, added intros and outro check-in: de7c009e4d user: spiffytech@gmail.com tags: master | |
Modified parse.py from [9c47a4ff24] to [e9eede661e].
1 2 3 4 5 6 7 8 | #!/usr/bin/env python from ply import lex, yacc class Note(): def __init__(self, value, duration=.25, octave=8): self.value = value self.duration = duration self.octave = octave | > > | 1 2 3 4 5 6 7 8 9 10 | #!/usr/bin/env python import tree from ply import lex, yacc class Note(): def __init__(self, value, duration=.25, octave=8): self.value = value self.duration = duration self.octave = octave |
︙ | ︙ | |||
33 34 35 36 37 38 39 40 41 42 43 44 | "NOTE_LENGTH", "BASENOTE", "ACCIDENTAL", "REST", "OCTAVE", "CHORD_TYPE", "QUOTE", ) t_ignore = " |" #t_BASENOTE = r"[A-Ga-g]" | > | > > | 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | "NOTE_LENGTH", "BASENOTE", "ACCIDENTAL", "REST", "OCTAVE", "CHORD_TYPE", "QUOTE", "NODE", ) t_ignore = " |" #t_BASENOTE = r"[A-Ga-g]" # t_BASENOTE = r"I+V?|VI*|i+v?|vi*" t_BASENOTE = r"[A-Ga-g]" t_ACCIDENTAL = r"\^{1,2}|_{1,2}|=" t_REST = r"z" t_OCTAVE = r"'+|,+" t_CHORD_TYPE = r"m|7|m7|0|o|\+|mb5|sus|sus4|maj7|mmaj7|7sus4|dim|dim7|7b5|m7b5|6|b6|m6|mb6|46|maj9|9|add9|7b9|m9" t_QUOTE = '"' t_NODE = r"([a-zA-Z0-9_-]+)" def t_NOTE_LENGTH(t): r"/?\d+" multiplier = float(t.value.strip("/")) if t.value.startswith("/"): multiplier = 1/multiplier t.value = multiplier |
︙ | ︙ | |||
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | # Parse (yacc) def p_pitch_list(p): '''score : score note | score chord | score rest ''' p[0] = p[1] + [p[2]] def p_score(p): '''score : note | chord | rest ''' p[0] = [p[1]] def p_note(p): '''note : pitch ''' | > > | 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | # Parse (yacc) def p_pitch_list(p): '''score : score note | score chord | score rest | score node ''' p[0] = p[1] + [p[2]] def p_score(p): '''score : note | chord | rest | node ''' p[0] = [p[1]] def p_note(p): '''note : pitch ''' |
︙ | ︙ | |||
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | def p_rest(p): ''' rest : REST | REST NOTE_LENGTH ''' p[0] = Rest() if len(p) > 2: p[0].duration = p[2] def p_error(p): raise Exception("Syntax error at '%s' of element type %s" % (p.value, p.type)) yacc.yacc() #print yacc.parse("GFG B'AB,, | g/2fg gab | GFG BAB | d2A AFD") return yacc.parse(score) | > > > > > > | 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | def p_rest(p): ''' rest : REST | REST NOTE_LENGTH ''' p[0] = Rest() if len(p) > 2: p[0].duration = p[2] def node(p): '''node: NODE ''' p[0] = tree.Tree(node.strip("(").strip(")")) def p_error(p): raise Exception("Syntax error at '%s' of element type %s" % (p.value, p.type)) yacc.yacc() #print yacc.parse("GFG B'AB,, | g/2fg gab | GFG BAB | d2A AFD") return yacc.parse(score) |
Added tree.py version [29c78902c8].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | import pdb class Tree(): def __init__(self, name): self.nodes = [] self.name = name def traverse_depth_first(self): all_nodes = [] for node in self.nodes: if isinstance(node, Node): all_nodes.append(node) elif isinstance(node, Tree): # pdb.set_trace() all_nodes.extend(node.traverse_depth_first()) return all_nodes def __str__(self): return str(self.__unicode__()) def __unicode__(self): return self.nodes class Node(): def __init__(self, parent, data): self.parent = parent self.data = data def __str__(self): return str(self.__unicode__()) def __unicode__(self): return self.data |