diff --git a/doc/uml/lib/class.puml b/doc/uml/lib/class.puml index 67cd609..54b4e9e 100644 --- a/doc/uml/lib/class.puml +++ b/doc/uml/lib/class.puml @@ -1,6 +1,7 @@ @startuml "bliplib class diagram" left to right direction +skinparam linetype ortho package std { interface From { @@ -18,6 +19,29 @@ package fasteval { package parser { interface TokenParser + struct ParserParametters<'n, 's, 'v, I: Input + Clone + nom::Compare, C: Into> { + +notes: &'n [I] + +slopes: &'s HashMap + +variables: &'v [C] + } + struct Parser<'i, 'n, 's, 'v, I: Input + Clone, C: Into> { + -input: &'i I + -parametters: ParserParametters<'n, 's, 'v, I, C> + +parse_all(): Result>, nom::Error>> + } + struct ParserBuilder<'i, 'n, 's, 'v, I: Input + Clone, C: Into> { + -input: Option<&'i I> + -notes: Option<&'n [I]> + -slopes: Option<&'s HashMap> + -variables: Option<&'v [C]> + +input(self, input: &'i I): Self + +notes(self, notes: &'n [I]): Self + +slopes(self, slopes: &'s HashMap): Self + +variables(self, variables: &'v [C]): Self + } +} + +package compiler { interface Token { -apply(&self, context: Context): Context } @@ -50,49 +74,6 @@ package parser { +each_frame: VariableChange -parser<'n, 's, 'v, I: Input + Clone + nom::Compare, C: Into>(parametters: ParserParametters<'n, 's, 'v, I, C>): impl TokenParser } - Silence ..|> Token - Marker ..|> Token - Note ..|> Token - VariableChange ..|> Token - Loop ..|> Token - Tuplet ..|> Token - Slope ..|> Token - Silence --> TokenParser - Marker --> TokenParser - Note --> TokenParser - VariableChange --> TokenParser - Loop --> TokenParser - Tuplet --> TokenParser - Slope --> TokenParser - struct ParserParametters<'n, 's, 'v, I: Input + Clone + nom::Compare, C: Into> { - +notes: &'n [I] - +slopes: &'s HashMap - +variables: &'v [C] - } - Loop --> ParserParametters - Tuplet --> ParserParametters - Slope --> ParserParametters - struct Parser<'i, 'n, 's, 'v, I: Input + Clone, C: Into> { - -input: &'i I - -parametters: ParserParametters<'n, 's, 'v, I, C> - +parse_all(): Result>, nom::Error>> - } - struct ParserBuilder<'i, 'n, 's, 'v, I: Input + Clone, C: Into> { - -input: Option<&'i I> - -notes: Option<&'n [I]> - -slopes: Option<&'s HashMap> - -variables: Option<&'v [C]> - +input(self, input: &'i I): Self - +notes(self, notes: &'n [I]): Self - +slopes(self, slopes: &'s HashMap): Self - +variables(self, variables: &'v [C]): Self - } - Token --> Parser - Parser --> VariableChange - ParserBuilder --> VariableChange -} - -package compiler { struct Context { +result: Vec +variables: HashMap @@ -103,6 +84,29 @@ package compiler { } } +compiler.Silence ..|> Token +compiler.Marker ..|> Token +compiler.Note ..|> Token +compiler.VariableChange ..|> Token +compiler.Loop ..|> Token +compiler.Tuplet ..|> Token +compiler.Slope ..|> Token +compiler.Token --> parser.Parser +parser.Parser --> VariableChange +parser.ParserBuilder --> VariableChange + +compiler.Loop --> ParserParametters +compiler.Tuplet --> ParserParametters +compiler.Slope --> ParserParametters + +compiler.Silence --> TokenParser +compiler.Marker --> TokenParser +compiler.Note --> TokenParser +compiler.VariableChange --> TokenParser +compiler.Loop --> TokenParser +compiler.Tuplet --> TokenParser +compiler.Slope --> TokenParser + interface "From" as from_parserbuilder interface "nom::Parser>" as nomparser_locatedspan @@ -114,9 +118,9 @@ parser.Parser --> nomparser_locatedspan parser.Parser ..|> from_parserbuilder parser.TokenParser --|> nomparser_locatedspan: Output = Self, Error = nom::Err nomparser_locatedspan ..|> parser.TokenParser: for any T -parser.Slope --> parser.VariableChange -parser.Token --> compiler.Context -VariableChange --> Instruction +compiler.Slope --> compiler.VariableChange +compiler.Token --> compiler.Context +compiler.VariableChange --> Instruction Context --> Instruction @enduml \ No newline at end of file