#[derive(Debug, Clone, PartialEq)]
pub enum Token {
Print, Set, Create, Add, Subtract, Multiply, Divide, Increment, Decrement,
Allocate, Free, Append, Copy, Clear,
Open, Read, Write, Close, Delete, Exists, Resize, Seek,
If, When, Then, Else, But, Otherwise, While, For, Each,
Repeat, Times, Break, Continue, Return, Exit,
With, Called, Modulo,
Flag, Parse, Required, Default,
Is, Are, Equals, Equal, Greater, Less, Than, Not, And, Or,
From, To, Between, In, Of, On, The, A, An, Treating,
Number, Float, Int, Text, Boolean, List, Map, True, False,
Buffer, File, Bytes, Into, Reading, Writing, Appending, Standard, Input,
Even, Odd, Positive, Negative, Zero, Empty,
Nothing,
Apostrophe, Descriptor, Modified, Accessed, Permissions,
Readable, Writable, Full, Keys, Values, Absolute, Sign,
Error, Auto, Enable, Disable,
See, Library, Version,
Argument, Arguments, Environment, Variable,
Wait, Sleep, Timer,
Get, Current, Time, Seconds, Millisecond, Milliseconds,
Duration, Elapsed, Hour, Minute, Day, Month, Year, Unix,
Running, As,
BitAnd, BitOr, BitXor, BitNot, BitShiftLeft, BitShiftRight,
Byte, Element, Without,
IntegerLiteral(i64),
FloatLiteral(f64),
StringLiteral(String),
Identifier(String),
Period, Comma, Colon, OpenBracket, CloseBracket, OpenBrace, CloseBrace, Minus,
Newline, ParagraphBreak, EOF,
}
impl Token {
#[allow(dead_code)]
pub fn string_is_keyword(s: &str) -> Option<&'static str> {
let lower = s.to_lowercase();
match lower.as_str() {
"print" | "say" | "display" | "output" | "show" => Some("print"),
"set" | "assign" | "let" | "make" | "put" => Some("set"),
"create" | "declare" | "define" => Some("create"),
"add" | "plus" => Some("add"),
"subtract" | "minus" => Some("subtract"),
"multiply" | "times" => Some("multiply"),
"divide" | "over" => Some("divide"),
"increment" | "increase" => Some("increment"),
"decrement" | "decrease" => Some("decrement"),
"execute" => Some("execute"),
"allocate" => Some("allocate"),
"free" | "deallocate" | "release" => Some("free"),
"clear" => Some("clear"),
"modulo" | "mod" | "remainder" => Some("modulo"),
"if" => Some("if"),
"when" => Some("when"),
"then" => Some("then"),
"else" => Some("else"),
"but" => Some("but"),
"otherwise" => Some("otherwise"),
"while" => Some("while"),
"for" => Some("for"),
"each" => Some("each"),
"repeat" => Some("repeat"),
"break" => Some("break"),
"continue" | "skip" => Some("continue"),
"return" | "give" | "respond" | "reply" => Some("return"),
"exit" | "quit" | "terminate" | "end" | "halt" | "abort" => Some("exit"),
"with" | "using" | "given" | "taking" => Some("with"),
"called" | "named" => Some("called"),
"parse" => Some("parse"),
"flag" => Some("flag"),
"required" => Some("required"),
"default" => Some("default"),
"is" | "equals" | "equal" | "==" => Some("is"),
"are" => Some("are"),
"greater" | "more" | "larger" | "bigger" | "higher" | "above" => Some("greater"),
"less" | "smaller" | "lower" | "below" | "fewer" => Some("less"),
"than" => Some("than"),
"not" | "!" => Some("not"),
"and" | "&&" => Some("and"),
"or" | "||" => Some("or"),
"from" | "starting" => Some("from"),
"to" | "up" => Some("to"),
"between" => Some("between"),
"in" | "inside" | "within" => Some("in"),
"of" => Some("of"),
"on" | "at" => Some("on"),
"the" => Some("the"),
"a" => Some("a"),
"an" => Some("an"),
"treating" | "treat" => Some("treating"),
"number" | "numbers" => Some("number"),
"float" | "decimal" | "real" => Some("float"),
"int" | "integer" => Some("int"),
"text" | "string" | "message" => Some("text"),
"boolean" | "bool" => Some("boolean"),
"list" | "array" | "collection" => Some("list"),
"true" | "yes" => Some("true"),
"false" | "no" => Some("false"),
"buffer" => Some("buffer"),
"file" => Some("file"),
"bytes" => Some("bytes"),
"byte" => Some("byte"),
"into" => Some("into"),
"reading" => Some("reading"),
"writing" => Some("writing"),
"appending" => Some("appending"),
"standard" => Some("standard"),
"input" => Some("input"),
"open" | "opened" => Some("open"),
"read" => Some("read"),
"write" => Some("write"),
"close" | "closed" => Some("close"),
"delete" | "remove" => Some("delete"),
"exists" | "exist" => Some("exists"),
"resize" | "reallocate" | "grow" | "shrink" => Some("resize"),
"seek" => Some("seek"),
"even" => Some("even"),
"odd" => Some("odd"),
"positive" => Some("positive"),
"negative" => Some("negative"),
"zero" => Some("zero"),
"empty" => Some("empty"),
"nothing" | "null" | "nil" => Some("nothing"),
"descriptor" | "fd" => Some("descriptor"),
"modified" => Some("modified"),
"accessed" => Some("accessed"),
"permissions" | "perms" => Some("permissions"),
"readable" => Some("readable"),
"writable" => Some("writable"),
"full" => Some("full"),
"absolute" | "abs" => Some("absolute"),
"sign" => Some("sign"),
"error" => Some("error"),
"auto" | "automatic" => Some("auto"),
"enable" | "enabled" => Some("enable"),
"disable" | "disabled" => Some("disable"),
"see" | "import" | "include" | "require" => Some("see"),
"library" | "lib" => Some("library"),
"ver" => Some("version"),
"argument" | "arg" | "param" | "parameter" => Some("argument"),
"arguments" | "args" | "params" | "parameters" => Some("arguments"),
"environment" | "env" => Some("environment"),
"variable" | "var" => Some("variable"),
"wait" | "pause" => Some("wait"),
"sleep" | "delay" => Some("sleep"),
"timer" | "stopwatch" => Some("timer"),
"get" | "fetch" | "retrieve" => Some("get"),
"current" => Some("current"),
"time" => Some("time"),
"seconds" => Some("seconds"),
"millisecond" => Some("millisecond"),
"milliseconds" | "ms" => Some("milliseconds"),
"duration" => Some("duration"),
"elapsed" => Some("elapsed"),
"hour" | "hours" => Some("hour"),
"minute" | "minutes" => Some("minute"),
"day" | "days" => Some("day"),
"month" | "months" => Some("month"),
"year" | "years" => Some("year"),
"unix" | "unixtime" | "timestamp" => Some("unix"),
"running" => Some("running"),
"as" => Some("as"),
_ => None,
}
}
pub fn as_keyword(&self) -> Option<&'static str> {
match self {
Token::Print => Some("print"),
Token::Set => Some("set"),
Token::Create => Some("create"),
Token::Add => Some("add"),
Token::Subtract => Some("subtract"),
Token::Multiply => Some("multiply"),
Token::Divide => Some("divide"),
Token::Increment => Some("increment"),
Token::Decrement => Some("decrement"),
Token::Allocate => Some("allocate"),
Token::Free => Some("free"),
Token::Append => Some("append"),
Token::Copy => Some("copy"),
Token::Clear => Some("clear"),
Token::Open => Some("open"),
Token::Read => Some("read"),
Token::Write => Some("write"),
Token::Close => Some("close"),
Token::Delete => Some("delete"),
Token::Exists => Some("exists"),
Token::Resize => Some("resize"),
Token::Seek => Some("seek"),
Token::If => Some("if"),
Token::When => Some("when"),
Token::Then => Some("then"),
Token::Else => Some("else"),
Token::But => Some("but"),
Token::Otherwise => Some("otherwise"),
Token::While => Some("while"),
Token::For => Some("for"),
Token::Each => Some("each"),
Token::Repeat => Some("repeat"),
Token::Times => Some("times"),
Token::Break => Some("break"),
Token::Continue => Some("continue"),
Token::Return => Some("return"),
Token::Exit => Some("exit"),
Token::With => Some("with"),
Token::Called => Some("called"),
Token::Modulo => Some("modulo"),
Token::Parse => Some("parse"),
Token::Flag => Some("flag"),
Token::Required => Some("required"),
Token::Default => Some("default"),
Token::Is => Some("is"),
Token::Are => Some("are"),
Token::Equals => Some("equals"),
Token::Equal => Some("equal"),
Token::Greater => Some("greater"),
Token::Less => Some("less"),
Token::Than => Some("than"),
Token::Not => Some("not"),
Token::And => Some("and"),
Token::Or => Some("or"),
Token::From => Some("from"),
Token::To => Some("to"),
Token::Between => Some("between"),
Token::In => Some("in"),
Token::Of => Some("of"),
Token::On => Some("on"),
Token::The => Some("the"),
Token::A => Some("a"),
Token::An => Some("an"),
Token::Treating => Some("treating"),
Token::Number => Some("number"),
Token::Float => Some("float"),
Token::Int => Some("int"),
Token::Text => Some("text"),
Token::Boolean => Some("boolean"),
Token::List => Some("list"),
Token::Map => Some("map"),
Token::True => Some("true"),
Token::False => Some("false"),
Token::Buffer => Some("buffer"),
Token::File => Some("file"),
Token::Bytes => Some("bytes"),
Token::Into => Some("into"),
Token::Reading => Some("reading"),
Token::Writing => Some("writing"),
Token::Appending => Some("appending"),
Token::Standard => Some("standard"),
Token::Input => Some("input"),
Token::Even => Some("even"),
Token::Odd => Some("odd"),
Token::Positive => Some("positive"),
Token::Negative => Some("negative"),
Token::Zero => Some("zero"),
Token::Empty => Some("empty"),
Token::Nothing => Some("nothing"),
Token::Apostrophe => None, Token::Descriptor => Some("descriptor"),
Token::Modified => Some("modified"),
Token::Accessed => Some("accessed"),
Token::Permissions => Some("permissions"),
Token::Readable => Some("readable"),
Token::Writable => Some("writable"),
Token::Full => Some("full"),
Token::Keys => Some("keys"),
Token::Values => Some("values"),
Token::Absolute => Some("absolute"),
Token::Sign => Some("sign"),
Token::Error => Some("error"),
Token::Auto => Some("auto"),
Token::Enable => Some("enable"),
Token::Disable => Some("disable"),
Token::See => Some("see"),
Token::Library => Some("library"),
Token::Version => Some("version"),
Token::Argument => Some("argument"),
Token::Arguments => Some("arguments"),
Token::Environment => Some("environment"),
Token::Variable => Some("variable"),
Token::Wait => Some("wait"),
Token::Sleep => Some("sleep"),
Token::Timer => Some("timer"),
Token::Get => Some("get"),
Token::Current => Some("current"),
Token::Time => Some("time"),
Token::Seconds => Some("seconds"),
Token::Millisecond => Some("millisecond"),
Token::Milliseconds => Some("milliseconds"),
Token::Duration => Some("duration"),
Token::Elapsed => Some("elapsed"),
Token::Hour => Some("hour"),
Token::Minute => Some("minute"),
Token::Day => Some("day"),
Token::Month => Some("month"),
Token::Year => Some("year"),
Token::Unix => Some("unix"),
Token::Running => Some("running"),
Token::As => Some("as"),
Token::BitAnd => Some("bit-and"),
Token::BitOr => Some("bit-or"),
Token::BitXor => Some("bit-xor"),
Token::BitNot => Some("bit-not"),
Token::BitShiftLeft => Some("bit-shift-left"),
Token::BitShiftRight => Some("bit-shift-right"),
Token::Byte => Some("byte"),
Token::Element => Some("element"),
Token::Without => Some("without"),
Token::IntegerLiteral(_) => None,
Token::FloatLiteral(_) => None,
Token::StringLiteral(_) => None,
Token::Identifier(_) => None,
Token::Period => None,
Token::Comma => None,
Token::Colon => None,
Token::OpenBracket => None,
Token::CloseBracket => None,
Token::OpenBrace => None,
Token::CloseBrace => None,
Token::Minus => None,
Token::Newline => None,
Token::ParagraphBreak => None,
Token::EOF => None,
}
}
}