Beispiel #1
0
        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);
        }
Beispiel #2
0
        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();
        }