public static Score Interpret(List <Token> tokens) { var builder = new TokenScoreBuilder(); var visitor = new TokenVisitor(builder); foreach (var token in tokens) { token.Accept(visitor); } return(builder.Build()); }
public void AddRepeat(Repeat repeat) { _currentGroup = new SymbolGroup { Meter = _score.SymbolGroups.Last().Meter, Tempo = _score.SymbolGroups.Last().Tempo, Repeat = new Common.Models.Repeat { Times = repeat.Times } }; var visitor = new TokenVisitor(this); foreach (var token in repeat.Inner) { token.Accept(visitor); } foreach (var alt in repeat.Alternatives) { _currentGroup.Repeat.Alternatives.Add(new SymbolGroup { Meter = _score.SymbolGroups.Last().Meter, Tempo = _score.SymbolGroups.Last().Tempo, }); foreach (var token in alt) { if (token is Note note) { _currentGroup.Repeat.Alternatives.Last().Symbols.Add(GetNote(note)); } if (token is Rest rest) { _currentGroup.Repeat.Alternatives.Last().Symbols.Add(GetRest(rest)); } } } _score.SymbolGroups.Add(_currentGroup); }