Skip to content
Snippets Groups Projects
Commit 0d5e5336 authored by Federico Lolli's avatar Federico Lolli
Browse files

Added WIP arpist-traject

parent f9325b4e
Branches
Tags
No related merge requests found
[package]
name = "arpist-traject"
version = "0.1.0"
edition = "2021"
[dependencies]
logos = "0.14.0"
TRAJECTORY <- TIME_DEF (FILLER* GENERATOR PARAMETER+ FILLER* TIME_DEF)+
TIME_DEF <- "@" SPACE+ "T" POS_NUM SPACE* NEWLINE
GENERATOR <- "=" SPACE+ "[" GENERATOR_KIND "]" SPACE* NEWLINE
PARAMETER <- "#" SPACE+ COORDINATE SPACE* ":" SPACE* EQUATION SPACE* NEWLINE
FILLER <- "|" SPACE* NEWLINE
GENERATOR_KIND <- "parametric"
COORDINATE <- [xyz]
EXPR <- SUM
SUM <- PRODUCT (SPACE* (SUM_OP / SUB_OP) SPACE* PRODUCT)*
PRODUCT <- POWER (SPACE* (PRODUCT_OP / DIV_OP) SPACE* POWER)*
POWER <- VALUE (SPACE* POWER_OP SPACE* VALUE)*
VALUE <- NUM / "(" EXPR ")"
NUM <- POS_NUM / NEG_NUM
NEG_NUM <- "-" NUM
POS_NUM <- ("+")? [0-9]+ ("." [0-9]+)?
SUM_OP <- "+"
SUB_OP <- "-"
PRODUCT_OP <- "*"
POWER_OP <- "^"
DIV_OP <- "/"
NEWLINE <- [\n\r]
SPACE <- [ \t]
mod tokens;
use logos::Logos;
use self::tokens::Token;
fn main() {
let input = std::fs::read_to_string("test.txt").unwrap();
let lex = Token::lexer(&input);
let tokens = lex.spanned().collect::<Vec<_>>();
for token in &tokens {
println!("{:?}", token.0.as_ref().unwrap());
}
// dbg!(tokens);
}
use logos::Logos;
#[derive(Debug, PartialEq, Logos)]
pub enum Token {
#[regex("[ \t]+")]
Spaces,
#[regex("[\n\r]")]
Newline,
#[regex("[0-9]+(\\.[0-9]+)?", |lex| lex.slice().parse().ok())]
Num(f64),
#[token("+")]
OpAdd,
#[token("-")]
OpSub,
#[token("*")]
OpMul,
#[token("/")]
OpDiv,
#[token("^")]
OpPow,
#[token("(")]
LParen,
#[token(")")]
RParen,
#[token("[")]
LBracket,
#[token("]")]
RBracket,
#[token("t")]
Time,
#[token("T")]
TimeRef,
#[token("x")]
PositionX,
#[token("y")]
PositionY,
#[token("z")]
PositionZ,
#[token(":")]
Colon,
#[token("parametric")]
ParametricGenerator,
#[token("|")]
FillerLine,
#[token("@")]
AtTimeLine,
#[token("=")]
GeneratorLine,
#[token("#")]
ParameterLine,
}
@ T+0
|
= [parametric]
# x: 0.03*t
# y: 0.02*t
# z: 3*t^2
|
@ T+10
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment