Пример #1
0
        public void TestMultiStatement(string text, int expectedStatements)
        {
            GrammarParseResult result = Parse(text);

            Assert.True(result.IsSuccessful);
            Assert.Equal(expectedStatements, result.Children.Count);
        }
Пример #2
0
        public void TestArithmetic(string text, int expectedValue)
        {
            GrammarParseResult result = Parse(text);

            Assert.True(result.IsSuccessful);
            Console.WriteLine(result.Output);
            Assert.Equal(expectedValue, result.Value);
        }
Пример #3
0
        public GrammarParseResult GetValue(string name)
        {
            CreatureAction action = Prototype.CreatureActions.SingleOrDefault(x => x.Name.Equals(name));

            if (action != null)
            {
                return(Engine.Parsers.ParserHelper.Evaluate(action.ActionText, Controller.Instance.CurrentRuleSet));
            }

            //Assume it's an attribute if it's not an action
            GrammarParseResult result = new GrammarParseResult($"{IndividualName}'s ({Prototype.EntityName}) {name}");

            //Check Abilities
            AbilityAttr ability = AbilityScores.SingleOrDefault(x => x.Key.Name.Equals(name)).Key;

            if (ability != null)
            {
                result.Value         = AbilityScores[ability];
                result.EvaluatedText = AbilityScores[ability].ToString();
                return(result);
            }

            //Check Ability Skills
            AbilitySkillAttr abilityskill = AbilitySkillScores.SingleOrDefault(x => x.Key.Name.Equals(name)).Key;

            if (ability != null)
            {
                result.Value         = AbilitySkillScores[abilityskill];
                result.EvaluatedText = AbilitySkillScores[abilityskill].ToString();
                return(result);
            }

            //Check Counters
            CounterAttr counter = CounterValues.SingleOrDefault(x => x.Key.Name.Equals(name)).Key;

            if (ability != null)
            {
                result.Value         = CounterValues[counter];
                result.EvaluatedText = CounterValues[counter].Value.ToString();
                return(result);
            }

            //Check Other Attributes
            OtherAttr otherAttr = OtherScores.SingleOrDefault(x => x.Key.Name.Equals(name)).Key;

            if (ability != null)
            {
                result.Value         = OtherScores[otherAttr];
                result.EvaluatedText = OtherScores[otherAttr].ToString();
                return(result);
            }


            result.IsSuccessful = false;
            result.Value        = 0;
            result.Output       = $"Creatures of type \"{Prototype.EntityName}\" do not have an action or attribute with name \"{name}\"";
            return(result);
        }
Пример #4
0
        public void TestComplexExpression(string text)
        {
            GrammarParseResult result = Parse(text);

            //Just test it once. These tests are mainly to make sure it parses correctly
            Assert.True(result.IsSuccessful);
            Console.WriteLine(result.Output);
            Console.WriteLine(result.Value);
        }
Пример #5
0
        public void TestRoll(string text, int expectedLow, int expectedHigh)
        {
            GrammarParseResult result = Parse(text);

            //Just test it once. These tests are mainly to make sure it parses correctly
            Assert.True(result.IsSuccessful);
            Console.WriteLine(result.Output);
            Assert.InRange(result.Value, expectedLow, expectedHigh);
        }
Пример #6
0
        public void TestStatementLabel()
        {
            string             label  = "This is a label";
            string             text   = $"5d10 + 2 : {label}";
            GrammarParseResult result = Parse(text);

            Assert.True(result.IsSuccessful);
            Assert.Equal(label, result.Label);
        }
Пример #7
0
        private GrammarParseResult Parse(string text)
        {
            AntlrInputStream  inputStream       = new AntlrInputStream(text);
            GrammarLexer      grammarLexer      = new GrammarLexer(inputStream);
            CommonTokenStream commonTokenStream = new CommonTokenStream(grammarLexer);
            GrammarParser     grammarParser     = new GrammarParser(commonTokenStream);

            GrammarParser.StatementsContext context = grammarParser.statements();
            StatementsVisitor  visitor = new StatementsVisitor(new TestRuleSet());
            GrammarParseResult result  = visitor.Visit(context);

            return(result);
        }
Пример #8
0
        public static GrammarParseResult Evaluate(string text, IRuleSet ruleSet)
        {
            if (String.IsNullOrEmpty(text?.Trim()))
            {
                return(GrammarParseResult.Unsuccessful(text));
            }
            AntlrInputStream  inputStream       = new AntlrInputStream(text);
            GrammarLexer      grammarLexer      = new GrammarLexer(inputStream);
            CommonTokenStream commonTokenStream = new CommonTokenStream(grammarLexer);
            GrammarParser     grammarParser     = new GrammarParser(commonTokenStream);

            GrammarParser.StatementsContext context = grammarParser.statements();
            StatementsVisitor  visitor = new StatementsVisitor(ruleSet);
            GrammarParseResult result  = visitor.Visit(context);

            return(result);
        }