two parsers with macros, enum deps, allow dead code
This commit is contained in:
parent
87abf20e67
commit
f9841267ec
6 changed files with 126 additions and 2 deletions
|
@ -1,6 +1,8 @@
|
|||
use bng_macros::{ModifierParser, SlopeModifierParser};
|
||||
use fasteval::Instruction;
|
||||
|
||||
mod lex;
|
||||
use lex::Token;
|
||||
|
||||
pub(super) enum Atom {
|
||||
Note(u8),
|
||||
|
@ -12,6 +14,7 @@ pub(super) enum Atom {
|
|||
EmptyWrapper(WrapperKind),
|
||||
}
|
||||
|
||||
#[derive(ModifierParser)]
|
||||
pub(super) enum Modifier {
|
||||
Volume(u8),
|
||||
Octave(u8),
|
||||
|
@ -33,6 +36,7 @@ pub(super) enum WrapperKind {
|
|||
Comment,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, SlopeModifierParser)]
|
||||
pub(super) enum SlopeModifier {
|
||||
Note,
|
||||
Volume,
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
use super::{Atom, Modifier, WrapperKind};
|
||||
use super::{Atom, Modifier, SlopeModifier, WrapperKind};
|
||||
|
||||
pub(super) mod lexer;
|
||||
|
||||
const MORE: bool = true;
|
||||
const LESS: bool = false;
|
||||
const ON: bool = true;
|
||||
|
@ -12,7 +15,7 @@ impl WrappingTokens {
|
|||
const SEMICOLON_COMMA: (char, char) = (';', ',');
|
||||
}
|
||||
|
||||
trait Token<T> {
|
||||
pub(super) trait Token<T> {
|
||||
fn token(self) -> T;
|
||||
}
|
||||
|
||||
|
@ -38,6 +41,18 @@ impl Token<char> for Modifier {
|
|||
}
|
||||
}
|
||||
|
||||
impl Token<char> for SlopeModifier {
|
||||
fn token(self) -> char {
|
||||
match self {
|
||||
Self::Note => 'n',
|
||||
Self::Volume => 'v',
|
||||
Self::Octave => 'o',
|
||||
Self::Length => 'l',
|
||||
Self::Tempo => 't',
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Token<char> for Atom {
|
||||
fn token(self) -> char {
|
||||
match self {
|
||||
|
|
5
src/bng/score/lex/lexer.rs
Normal file
5
src/bng/score/lex/lexer.rs
Normal file
|
@ -0,0 +1,5 @@
|
|||
use nom::IResult;
|
||||
|
||||
pub(crate) trait Parse: Sized {
|
||||
fn parse(input: &str) -> IResult<&str, Self>;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue