110 lines
2.8 KiB
C#
110 lines
2.8 KiB
C#
namespace Qrakhen.Qamp.Core.Tokenization;
|
|
|
|
using Qrakhen.Qamp.Core.Collections;
|
|
using static TokenType;
|
|
|
|
public class Dialect
|
|
{
|
|
// suuuper slow but meh, who cares
|
|
private Register<string, TokenType> _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(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(PlusEqual, "<+");
|
|
Define(MinusEqual, "<-");
|
|
Define(Equal, "<~");
|
|
Define(Ref, "&");
|
|
Define(This, ".~");
|
|
Define(Var, "*~");
|
|
Define(Return, "<:");
|
|
Define(Ref, "*&");
|
|
Define(Function, "fq");
|
|
Define(Base, "^~");
|
|
Define(TypeOf, "?:");
|
|
Define(Print, "::");
|
|
Define(Import, "<!");
|
|
Define(Export, "!>");
|
|
}
|
|
}
|