@@ -6,11 +6,10 @@ class Note(): def __init__(self, value, duration=1, octave=8): self.value = value self.duration = duration self.octave = octave - self.accidental = None def __repr__(self): return "Note %s %s %s" % (self.value, self.duration, self.octave) class Chord(): def __init__(self, value, duration=1, chord_type="major", octave=5): @@ -44,11 +43,11 @@ t_ignore = " |" t_BASENOTE = r"[A-Ga-g]" # t_BASENOTE = r"I+V?|VI*|i+v?|vi*" - t_ACCIDENTAL = r"\^{1,2}|_{1,2}|=" + t_ACCIDENTAL = r"\^{1}|_{1}|=" 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_PAREN = "\(|\)" t_SYNCOPATE = "\+|-" @@ -122,11 +121,14 @@ def p_accidental(p): '''note : ACCIDENTAL note ''' - p[2].accidental = p[1] + if p[1] == "^": + p[2].value += "#" + else: + p[2].value += "b" p[0] = p[2] def p_octave(p): '''note : note OCTAVE ''' @@ -153,11 +155,13 @@ ''' p[0] = tree.Tree(p[1].strip("(").strip(")")) def p_error(p): +# import ipdb +# ipdb.set_trace() print p raise Exception("Syntax error at '%s' of element type %s" % (p.value, p.type)) yacc.yacc() return yacc.parse(score)