示例#1
0
 private void DeclareNewVariable(Identifier key, IResolvable value)
 {
     if (ReferenceTables.ContainsIdentifier(key))
     {
         Exceptions.Add(new RedeclaredVariableWarning("Redeclared variable detected: " + key, key.SourceLocation));
     }
     ReferenceTables.SetReference(key, value);
 }
示例#2
0
 public UserInterfaceVisitor(ReferenceTables referenceTables, IList <QLBaseException> exceptions, ObservableCollection <WidgetBase> elementsToDisplay, Action rebuildMethod)
 {
     _widgetFactory     = new WidgetFactory();
     _elementsToDisplay = elementsToDisplay;
     _rebuildMethod     = rebuildMethod;
     ReferenceTables    = referenceTables;
     Exceptions         = exceptions;
 }
示例#3
0
        public void Visit(OrOperator node)
        {
            VisitBinary(node);

            ITerminalWrapper leftWrapper  = ReferenceTables.GetValue(node.Left);
            ITerminalWrapper rightWrapper = ReferenceTables.GetValue(node.Right);

            ReferenceTables.SetValue(node, ((dynamic)leftWrapper) | ((dynamic)rightWrapper));
        }
示例#4
0
        public void Visit(QuestionUnit node)
        {
            ReferenceTables.SetReference(node.Identifier, node.DataType);

            if (!ReferenceTables.ContainsReference(node.DataType))
            {
                var wrapper = _terminalWrapperFactory.CreateWrapper(node.DataType);
                node.Value = wrapper;
                ReferenceTables.SetValue(node.DataType, wrapper);
            }
        }
示例#5
0
        public void Visit(Expression node)
        {
            //if expression is literal
            if (node.Child == null)
            {
                throw new Exception("Expression should have one and only one child");
            }

            node.Child.Accept(this);

            ReferenceTables.SetValue(node, ReferenceTables.GetValue(node.Child));
        }
        private void SetRows(IList <IList <int> > rows)
        {
            var tableList = ReferenceTables.ToList();

            for (int i = 0; i < tableList.Count; ++i)
            {
                rowList[i] = new List <int>(rows[i]);
            }
            if (rows.Count > 0)
            {
                rowCount = rows[0].Count();
            }
        }
示例#7
0
        public void Visit(ControlUnit node)
        {
            node.Expression.Accept(this);

            YesnoWrapper conditionstate = (YesnoWrapper)ReferenceTables.GetValue(node.Expression);

            if (node.ConditionTrueBlock != null && conditionstate.Value.HasValue && conditionstate.Value.Value)
            {
                node.ConditionTrueBlock.Accept(this);
            }

            if (node.ConditionFalseBlock != null && conditionstate.Value.HasValue && !conditionstate.Value.Value)
            {
                node.ConditionFalseBlock.Accept(this);
            }
        }
示例#8
0
        public void Visit(ControlUnit node)
        {
            YesnoWrapper evaluatedResult = (YesnoWrapper)ReferenceTables.GetValueOrNull(node.Expression);

            _parentExpressionDidNotEvaluate = !evaluatedResult.ToBool();

            if (node.ConditionTrueBlock != null)
            {
                node.ConditionTrueBlock.Accept(this);
            }

            _parentExpressionDidNotEvaluate = false;
            if (node.ConditionFalseBlock != null)
            {
                node.ConditionFalseBlock.Accept(this);
            }
        }
示例#9
0
        public void Visit(StatementUnit node)
        {
            ITerminalWrapper evaluatedResult = ReferenceTables.GetValueOrNull(node.Expression);

            node.Value = evaluatedResult;

            WidgetBase unitWrapper = _widgetFactory.GetWidget(node);

            unitWrapper.Visibility = _parentExpressionDidNotEvaluate ? Visibility.Collapsed : Visibility.Visible;

            int index = _elementsToDisplay.ToList().FindIndex(elem => elem.Unit.Identifier == unitWrapper.Unit.Identifier);

            if (index < 0)
            {
                _elementsToDisplay.Add(unitWrapper);
            }
            else
            {
                _elementsToDisplay[index].Visibility = unitWrapper.Visibility;
            }
        }
示例#10
0
        public void Visit(QuestionUnit node)
        {
            WidgetBase unitWrapper = _widgetFactory.GetWidget(node, ReferenceTables.GetValue(node.Identifier));

            unitWrapper.Visibility = _parentExpressionDidNotEvaluate ? Visibility.Collapsed : Visibility.Visible;

            int index = _elementsToDisplay.ToList().FindIndex(elem => elem.Unit.Identifier == unitWrapper.Unit.Identifier);

            if (index < 0)
            {
                INotifyPropertyChanged nodeValue = node.Value as INotifyPropertyChanged;
                if (nodeValue != null)
                {
                    nodeValue.PropertyChanged += (sender, args) => _rebuildMethod();
                }

                _elementsToDisplay.Add(unitWrapper);
            }
            else
            {
                _elementsToDisplay[index].Visibility = unitWrapper.Visibility;
            }
        }
示例#11
0
 public void Visit(StatementUnit node)
 {
     node.Expression.Accept(this);
     ReferenceTables.SetReference(node.Identifier, node.Expression);
 }
示例#12
0
 public EvaluatorVisitor(ObservableCollection <QLBaseException> exceptions, ReferenceTables referenceTables)
 {
     _terminalWrapperFactory = new TerminalWrapperFactory();
     Exceptions      = exceptions;
     ReferenceTables = referenceTables;
 }
示例#13
0
 public void Visit(Text node)
 {
     ReferenceTables.SetValue(node, new TextWrapper(node));
 }
示例#14
0
 public void Visit(Yesno node)
 {
     ReferenceTables.SetValue(node, new YesnoWrapper(node));
 }
示例#15
0
 public void Visit(Number node)
 {
     ReferenceTables.SetValue(node, new NumberWrapper(node));
 }
示例#16
0
 public TypeCheckerVisitor(ReferenceTables referenceTables, IList <QLBaseException> exceptions)
 {
     ReferenceTables = referenceTables;
     Exceptions      = exceptions;
 }