namespace Qrakhen.Qamp.Core.Tokenization; using Qrakhen.Qamp.Core.Collections; using static TokenType; public class Dialect { // suuuper slow but meh, who cares private Register _register = new(); public void Define(TokenType type, string sequence) => _register[sequence] = type; public TokenType Get(string sequence) => _register[sequence]; } public class DefaultDialect : Dialect { public DefaultDialect() { Define(Null, "null"); Define(GroupOpen, "("); Define(GroupClose, ")"); Define(ContextOpen, "{"); Define(ContextClose, "}"); Define(ArrayOpen, "["); Define(ArrayClose, "]"); Define(ArrayAdd, "<+"); Define(ArrayRemove, "->"); Define(Comma, ","); Define(Dot, "."); Define(Colon, ":"); Define(Semicolon, ";"); Define(Minus, "-"); Define(Plus, "+"); Define(MinusEqual, "-="); Define(PlusEqual, "+="); Define(Decrement, "++"); Define(Increment, "--"); Define(Slash, "/"); Define(SlashEqual, "/="); Define(Star, "*"); Define(StarEqual, "*="); Define(Modulo, "%"); Define(ModuloEqual, "%="); Define(BitwiseAnd, "&"); Define(BitwiseOr, "|"); Define(BitwiseXor, "^"); Define(BitwiseNot, "~"); Define(BitwiseLeft, "<<"); Define(BitwiseRight, ">>"); Define(Bang, "!"); Define(BangEqual, "!="); Define(Equal, "="); Define(EqualEqual, "=="); Define(Greater, ">"); Define(GreaterEqual, ">="); Define(Less, "<"); Define(LessEqual, "<="); Define(Question, "?"); Define(DoubleQuestion, "??"); Define(Identifier, "([_a-zA-Z][_a-zA-Z0-9]+?)"); Define(String, "(:?('.+')|\".+\")"); Define(Integer, "(\\d+)"); Define(Decimal, ""); Define(Hexadecimal, "0x([a-fA-F0-9]+)"); Define(And, "&&"); Define(Else, "else"); Define(False, "false"); Define(For, "for"); Define(If, "if"); Define(Or, "||"); Define(This, "this"); Define(True, "true"); Define(Var, "var"); Define(While, "while"); Define(Do, "do"); Define(Return, "return"); Define(Ref, "ref"); Define(Function, "function"); Define(Class, "class"); Define(Base, "base"); Define(TypeOf, "typeof"); Define(Print, "print"); Define(Import, "import"); Define(Export, "export"); } } public class ClassicDialect : DefaultDialect { public ClassicDialect() { Define(Null, "_"); Define(ArrayAdd, "<+"); Define(ArrayRemove, "->"); Define(Equal, "<~"); Define(This, ".~"); Define(Var, "*~"); Define(Return, "<:"); Define(Ref, "*&"); Define(Function, "fq"); Define(Base, "^~"); Define(TypeOf, "?:"); Define(Print, "::"); Define(Import, ""); } }