two parsers with macros, enum deps, allow dead code

This commit is contained in:
Breval Ferrari 2024-10-04 12:30:24 -04:00
parent 87abf20e67
commit f9841267ec
No known key found for this signature in database
GPG key ID: 6FED68D87C479A59
6 changed files with 126 additions and 2 deletions

View file

@ -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,

View file

@ -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 {

View file

@ -0,0 +1,5 @@
use nom::IResult;
pub(crate) trait Parse: Sized {
fn parse(input: &str) -> IResult<&str, Self>;
}