Compare commits
No commits in common. "040bb4ecb3c642077e06d9748c5c0f3edd935648" and "2d5291c07bd392e4bc23c0b00e7ea17eb790cf40" have entirely different histories.
040bb4ecb3
...
2d5291c07b
4 changed files with 24 additions and 12 deletions
|
@ -96,11 +96,11 @@ fn impl_quick_modifier_parser(ast: DeriveInput) -> TokenStream {
|
||||||
(
|
(
|
||||||
nom::combinator::value(
|
nom::combinator::value(
|
||||||
true,
|
true,
|
||||||
nom::character::complete::char(#name::#variant_name(Default::default()).token().0)
|
nom::character::complete::char(#name::#variant_name(Default::default()).token()[0])
|
||||||
),
|
),
|
||||||
nom::combinator::value(
|
nom::combinator::value(
|
||||||
false,
|
false,
|
||||||
nom::character::complete::char(#name::#variant_name(Default::default()).token().1)
|
nom::character::complete::char(#name::#variant_name(Default::default()).token()[1])
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
|
|
@ -10,10 +10,8 @@ pub(super) enum Atom {
|
||||||
StartHere,
|
StartHere,
|
||||||
Modifier(Modifier),
|
Modifier(Modifier),
|
||||||
QuickModifier(QuickModifier),
|
QuickModifier(QuickModifier),
|
||||||
Loop(u8, Vec<Atom>),
|
Wrapper(WrapperKind, Vec<Atom>),
|
||||||
Tuple(Vec<Atom>),
|
EmptyWrapper(WrapperKind),
|
||||||
Slope(SlopeModifier, Instruction, Vec<Atom>),
|
|
||||||
Comment,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(ModifierParser)]
|
#[derive(ModifierParser)]
|
||||||
|
@ -32,6 +30,13 @@ pub(super) enum QuickModifier {
|
||||||
Pizz(bool),
|
Pizz(bool),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(super) enum WrapperKind {
|
||||||
|
Loop(u8),
|
||||||
|
Tuple,
|
||||||
|
Slope(SlopeModifier, Instruction),
|
||||||
|
Comment,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, SlopeModifierParser)]
|
#[derive(Clone, Copy, SlopeModifierParser)]
|
||||||
pub(super) enum SlopeModifier {
|
pub(super) enum SlopeModifier {
|
||||||
Note,
|
Note,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use super::{Atom, Modifier, QuickModifier, SlopeModifier};
|
use super::{Atom, Modifier, QuickModifier, SlopeModifier, WrapperKind};
|
||||||
|
|
||||||
pub(super) mod lexer;
|
pub(super) mod lexer;
|
||||||
|
|
||||||
|
@ -23,6 +23,17 @@ pub(super) trait Token<T> {
|
||||||
fn token(self) -> T;
|
fn token(self) -> T;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Token<(char, char)> for WrapperKind {
|
||||||
|
fn token(self) -> (char, char) {
|
||||||
|
match self {
|
||||||
|
Self::Loop(_) => WrappingTokens::PARENTHESES,
|
||||||
|
Self::Tuple => WrappingTokens::SQUARE_BRACKETS,
|
||||||
|
Self::Slope(_, _) => WrappingTokens::BRACKETS,
|
||||||
|
WrapperKind::Comment => WrappingTokens::SEMICOLON_COMMA,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Token<(char, char)> for QuickModifier {
|
impl Token<(char, char)> for QuickModifier {
|
||||||
fn token(self) -> (char, char) {
|
fn token(self) -> (char, char) {
|
||||||
match self {
|
match self {
|
||||||
|
|
|
@ -1,11 +1,7 @@
|
||||||
use nom::{
|
use nom::{branch::alt, character::complete::char, combinator::value, IResult, Parser};
|
||||||
branch::alt, character::complete::char, combinator::value, sequence::delimited, IResult, Parser,
|
|
||||||
};
|
|
||||||
|
|
||||||
use crate::bng::score::QuickModifier;
|
use crate::bng::score::QuickModifier;
|
||||||
|
|
||||||
use super::Token;
|
|
||||||
|
|
||||||
pub(crate) trait Parse: Sized {
|
pub(crate) trait Parse: Sized {
|
||||||
fn parse(input: &str) -> IResult<&str, Self>;
|
fn parse(input: &str) -> IResult<&str, Self>;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue