Exemple #1
0
        public void GenerateGUI()
        {
            QLGuiBuilder guiBuilder = new QLGuiBuilder();

            AST.Build(guiBuilder);

            GUIMain main = new GUIMain(guiBuilder.GetGUI());

            main.Initialize();
            main.ShowDialog();
        }
Exemple #2
0
        public void TestInterpretAndTranslateFunction()
        {
            var input   = "7+3*5-2";
            var result  = AST.Parse(input);
            var ethalon = new List <ANode>
            {
                new ANode {
                    token_type = TokenType.Bracket, token_value = "("
                },
                new ANode {
                    token_type = TokenType.Integer, token_value = "7"
                },
                new ANode {
                    token_type = TokenType.Operation, token_value = "+"
                },
                new ANode {
                    token_type = TokenType.Bracket, token_value = "("
                },
                new ANode {
                    token_type = TokenType.Bracket, token_value = "("
                },
                new ANode {
                    token_type = TokenType.Integer, token_value = "3"
                },
                new ANode {
                    token_type = TokenType.Operation, token_value = "*"
                },
                new ANode {
                    token_type = TokenType.Integer, token_value = "5"
                },
                new ANode {
                    token_type = TokenType.Bracket, token_value = ")"
                },
                new ANode {
                    token_type = TokenType.Operation, token_value = "-"
                },
                new ANode {
                    token_type = TokenType.Integer, token_value = "2"
                },
                new ANode {
                    token_type = TokenType.Bracket, token_value = ")"
                },
                new ANode {
                    token_type = TokenType.Bracket, token_value = ")"
                }
            };

            Assert.AreEqual(ethalon.Count, result.Count);
            for (var i = 0; i < result.Count; i++)
            {
                Assert.AreEqual(ethalon[i].token_type, result[i].token_type);
                Assert.AreEqual(ethalon[i].token_value, result[i].token_value);
            }

            var actualTree = AST.Build(result);

            var root = new SimpleTreeNode <ANode>(new ANode {
                token_type = TokenType.Operation, token_value = "+"
            }, null);
            var ethalonTree   = new SimpleTree <ANode>(root);
            var leftRootChild = new SimpleTreeNode <ANode>(new ANode {
                token_type = TokenType.Integer, token_value = "7"
            }, root);

            ethalonTree.AddChild(root, leftRootChild);
            var rightRootChild = new SimpleTreeNode <ANode>(new ANode {
                token_type = TokenType.Operation, token_value = "-"
            }, root);

            ethalonTree.AddChild(root, rightRootChild);
            var leftMultiplyOperation = new SimpleTreeNode <ANode>(new ANode {
                token_type = TokenType.Operation, token_value = "*"
            }, rightRootChild);

            ethalonTree.AddChild(rightRootChild, leftMultiplyOperation);
            var right2Value = new SimpleTreeNode <ANode>(new ANode {
                token_type = TokenType.Integer, token_value = "2"
            }, rightRootChild);

            ethalonTree.AddChild(rightRootChild, right2Value);
            var left3Value = new SimpleTreeNode <ANode>(new ANode {
                token_type = TokenType.Integer, token_value = "3"
            }, leftMultiplyOperation);

            ethalonTree.AddChild(leftMultiplyOperation, left3Value);
            var right5Value = new SimpleTreeNode <ANode>(new ANode {
                token_type = TokenType.Integer, token_value = "5"
            }, leftMultiplyOperation);

            ethalonTree.AddChild(leftMultiplyOperation, right5Value);

            var actualTreeList  = actualTree.GetAllNodes();
            var ethalonTreeList = ethalonTree.GetAllNodes();

            Assert.AreEqual(ethalonTreeList.Count, actualTreeList.Count);
            for (var i = 0; i < actualTreeList.Count; i++)
            {
                Assert.AreEqual(ethalonTreeList[i].NodeValue.token_type, actualTreeList[i].NodeValue.token_type);
                Assert.AreEqual(ethalonTreeList[i].NodeValue.token_value, actualTreeList[i].NodeValue.token_value);
                if (ethalonTreeList[i].Children == null)
                {
                    Assert.IsNull(actualTreeList[i].Children);
                }
                else
                {
                    Assert.AreEqual(ethalonTreeList[i].Children.Count, actualTreeList[i].Children.Count);
                    Assert.AreEqual(ethalonTreeList[i].Children.Count, 2);
                    Assert.AreEqual(actualTreeList[i].Children.Count, 2);
                }
            }

            var resultNode = AST.InterpretAndTranslate(actualTree);

            Assert.AreEqual(TokenType.Integer, resultNode.token_type);
            Assert.AreEqual("20", resultNode.token_value);
            Assert.AreEqual("(7+((3*5)-2))", resultNode.translated_result);
        }