コード例 #1
0
ファイル: SyntaxBaseExtensions.cs プロジェクト: husains/bicep
        /// <summary>
        /// Generate a string that represents this Syntax element.
        /// </summary>
        public static string ToTextPreserveFormatting(this SyntaxBase syntax)
        {
            var sb           = new StringBuilder();
            var printVisitor = new PrintVisitor(sb);

            printVisitor.Visit(syntax);
            return(sb.ToString());
        }
コード例 #2
0
            public void VisitIdentifierExpr()
            {
                var target = new PrintVisitor();

                var expression = new IdentifierExpr("test");

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("test", actual);
            }
コード例 #3
0
            public void VisitIntegerConstantExpr()
            {
                var target = new PrintVisitor();

                var expression = new ConstantExpr(1234);

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("1234", actual);
            }
コード例 #4
0
            public void VisitBooleanNotExpr(bool a, string expected)
            {
                var target = new PrintVisitor();

                var aExpression = new ConstantExpr(a);
                var expr        = new NotExpr(aExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
コード例 #5
0
            public void VisitDivExpr()
            {
                var target = new PrintVisitor();

                var lhs        = new ConstantExpr(1);
                var rhs        = new ConstantExpr(2);
                var expression = new DivExpr(lhs, rhs);

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("1/2", actual);
            }
コード例 #6
0
            public void VisitBooleanOrExpr(object a, object b, string expected)
            {
                var target = new PrintVisitor();

                var aExpression = new ConstantExpr(a);
                var bExpression = new ConstantExpr(b);
                var expr        = new OrExpr(aExpression, bExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
コード例 #7
0
        private static void GrammarParsingTest()
        {
            var grammar = Grammar.Create();
            var test    = @"
INT    := ""\b\d+\b"";
OP     := ""[+\-*/]"";
OPAREN := ""\("";
CPAREN := ""\)"";

---

EXPR := OPAREN EXPR CPAREN OP EXPR;
EXPR := INT OP EXPR;
EXPR := OPAREN EXPR CPAREN;
EXPR := INT;

> EXPR;
";
            var tokens  = grammar.Tokenize(test);

            Console.WriteLine(string.Join("\n", tokens));

            var result = grammar.Parse(tokens);

            if (result != null)
            {
                var printer = new PrintVisitor <GrammarToken, GrammarSymbol>();
                printer.Visit(result);
            }

            Console.WriteLine("Now running the resultin grammar:");

            var reader        = new Reader();
            var resultGrammar = reader.Read(result);

            var test2 = "(4 + (2 * 8)) / (6 - 1)";

            Console.WriteLine("Input: " + test2);

            var tokens2 = resultGrammar.Tokenize(test2);

            Console.WriteLine(string.Join("\n", tokens2));

            var result2 = resultGrammar.Parse(tokens2);

            if (result2 != null)
            {
                var printer = new PrintVisitor <string, string>();
                printer.Visit(result2);
            }
        }
コード例 #8
0
            public void VisitConditionalExpr(bool condition, int thenValue, int elseValue, string expected)
            {
                var target = new PrintVisitor();

                var conditionExpression = new ConstantExpr(condition);
                var thenExpression      = new ConstantExpr(thenValue);
                var elseExpression      = new ConstantExpr(elseValue);

                var expr = new ConditionalExpr(conditionExpression, thenExpression, elseExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
コード例 #9
0
            public void VisitMassEnergyEquavalenceExpressionTree()
            {
                var target = new PrintVisitor();

                var e   = new IdentifierExpr("e");
                var m   = new IdentifierExpr("m");
                var c   = new IdentifierExpr("C");
                var two = new ConstantExpr(2);

                var expression = new AssignmentExpr(e, new MultExpr(m, new PowExpr(c, two)));

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("e=m*C^2", actual);
            }
コード例 #10
0
            public void VisitMathExpressionTree()
            {
                var target = new PrintVisitor();

                var one   = new ConstantExpr(1);
                var two   = new ConstantExpr(2);
                var three = new ConstantExpr(3);
                var four  = new ConstantExpr(4);
                var five  = new ConstantExpr(5);
                var six   = new ConstantExpr(6);

                var expression = new DivExpr(new MultExpr(three, six), new MultExpr(new MinusExpr(five, one), new PlusExpr(four, two)));

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("3*6/5-1*4+2", actual);
            }
コード例 #11
0
            public void VisitAlgebraicExpressionTree()
            {
                var target = new PrintVisitor();

                var a     = new IdentifierExpr("a");
                var b     = new IdentifierExpr("b");
                var c     = new IdentifierExpr("c");
                var one   = new ConstantExpr(1);
                var two   = new ConstantExpr(2);
                var three = new ConstantExpr(3);
                var four  = new ConstantExpr(4);
                var five  = new ConstantExpr(5);
                var six   = new ConstantExpr(6);

                var expression = new DivExpr(new MultExpr(three, new MultExpr(a, two)), new MultExpr(new MinusExpr(new PowExpr(five, b), one), new PlusExpr(new MinusExpr(six, four), c)));

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("3*a*2/5^b-1*6-4+c", actual);
            }
コード例 #12
0
            public void VisitIntegerConstantExpr()
            {
                var target = new PrintVisitor();

                var expression = new ConstantExpr(1234);

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("1234", actual);
            }
コード例 #13
0
            public void VisitConditionalExpr(bool condition, int thenValue, int elseValue, string expected)
            {
                var target = new PrintVisitor();

                var conditionExpression = new ConstantExpr(condition);
                var thenExpression = new ConstantExpr(thenValue);
                var elseExpression = new ConstantExpr(elseValue);

                var expr = new ConditionalExpr(conditionExpression, thenExpression, elseExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
コード例 #14
0
            public void VisitBooleanNotExpr(bool a, string expected)
            {
                var target = new PrintVisitor();

                var aExpression = new ConstantExpr(a);
                var expr = new NotExpr(aExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
コード例 #15
0
            public void VisitBooleanOrExpr(object a, object b, string expected)
            {
                var target = new PrintVisitor();

                var aExpression = new ConstantExpr(a);
                var bExpression = new ConstantExpr(b);
                var expr = new OrExpr(aExpression, bExpression);

                var actual = target.Visit(expr, scope);

                Assert.AreEqual(expected, actual);
            }
コード例 #16
0
            public void VisitMassEnergyEquavalenceExpressionTree()
            {
                var target = new PrintVisitor();

                var e = new IdentifierExpr("e");
                var m = new IdentifierExpr("m");
                var c = new IdentifierExpr("C");
                var two = new ConstantExpr(2);

                var expression = new AssignmentExpr(e, new MultExpr(m, new PowExpr(c, two)));

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("e=m*C^2", actual);
            }
コード例 #17
0
            public void VisitAlgebraicExpressionTree()
            {
                var target = new PrintVisitor();

                var a = new IdentifierExpr("a");
                var b = new IdentifierExpr("b");
                var c = new IdentifierExpr("c");
                var one = new ConstantExpr(1);
                var two = new ConstantExpr(2);
                var three = new ConstantExpr(3);
                var four = new ConstantExpr(4);
                var five = new ConstantExpr(5);
                var six = new ConstantExpr(6);

                var expression = new DivExpr(new MultExpr(three,new MultExpr(a, two)), new MultExpr(new MinusExpr(new PowExpr(five,b), one), new PlusExpr(new MinusExpr(six, four), c)));

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("3*a*2/5^b-1*6-4+c", actual);
            }
コード例 #18
0
            public void VisitMathExpressionTree()
            {
                var target = new PrintVisitor();

                var one = new ConstantExpr(1);
                var two = new ConstantExpr(2);
                var three = new ConstantExpr(3);
                var four = new ConstantExpr(4);
                var five = new ConstantExpr(5);
                var six = new ConstantExpr(6);

                var expression = new DivExpr(new MultExpr(three, six), new MultExpr(new MinusExpr(five, one), new PlusExpr(four, two)));

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("3*6/5-1*4+2", actual);
            }
コード例 #19
0
            public void VisitIdentifierExpr()
            {
                var target = new PrintVisitor();

                var expression = new IdentifierExpr("test");

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("test", actual);
            }
コード例 #20
0
            public void VisitDivExpr()
            {
                var target = new PrintVisitor();

                var lhs = new ConstantExpr(1);
                var rhs = new ConstantExpr(2);
                var expression = new DivExpr(lhs, rhs);

                var actual = target.Visit(expression, scope);

                Assert.AreEqual("1/2", actual);
            }