static BoolEvaluator() { mLexer = new LexEngine <ExpTokens>() { ErrorToken = ExpTokens.Error, EofToken = ExpTokens.Eof }; mLexer.AddOperand(@"'(?<value>[^']+)'", ExpTokens.Literal_String); mLexer.AddOperand(@"""(?<value>[^""]+)""", ExpTokens.Literal_String); mLexer.AddOperand(@"\b(true|false)\b", ExpTokens.Literal_Bool); mLexer.AddOperand(@"\-?\d+(\.\d+(e\d+)?)?", ExpTokens.Literal_Number); mLexer.AddOperand(@"\$(?<value>\d+)\b", ExpTokens.Operand_Arg); mLexer.AddOperand(@"\@[a-zA-Z_0-9]+\b", ExpTokens.Operand_Const); mLexer.AddOperand(@"and\b", ExpTokens.Op_And); mLexer.AddOperand(@"\&\&", ExpTokens.Op_And); mLexer.AddOperand(@"\&", ExpTokens.Op_And); mLexer.AddOperand(@"or\b", ExpTokens.Op_Or); mLexer.AddOperand(@"\|\|", ExpTokens.Op_Or); mLexer.AddOperand(@"\|", ExpTokens.Op_Or); mLexer.AddOperand(@"!=", ExpTokens.Op_NotEquals); mLexer.AddOperand(@"!", ExpTokens.Op_Not); mLexer.AddOperand(@"==", ExpTokens.Op_Equals); mLexer.AddOperand(@"=", ExpTokens.Op_Equals); mLexer.AddOperand(@"<=", ExpTokens.Op_LessThanEquals); mLexer.AddOperand(@">=", ExpTokens.Op_GreaterThanEquals); mLexer.AddOperand(@"<", ExpTokens.Op_LessThan); mLexer.AddOperand(@">", ExpTokens.Op_GreaterThan); mLexer.AddOperand(@"\(", ExpTokens.Op_SubExpressionStart); mLexer.AddOperand(@"\)", ExpTokens.Op_SubExpressionEnd); }
static void Main(string[] args) { var example = "Have a `ri(1,100)`(chance)% chance when struck in combat of increasing armor by `ri(1,999)`(armor) for `randomt(1s,1d)`. That chance is: `chance`"; var exampleTokens = new LexParser(example).Transpile(); Console.WriteLine($"Input string: {exampleTokens.ToString()}"); Console.WriteLine(); var engine = new LexEngine(); engine.RegisterLibrary <SystemLibrary>(); engine.RegisterLibrary <WoWLibrary>(); for (var i = 0; i < 15; i++) { Console.WriteLine($"Example {i + 1}: {exampleTokens.Build(engine)}"); } Console.ReadLine(); }