Esempio n. 1
0
        public void TestNots()
        {
            var command = new Command("if", "not", "not", "not", "$var", "1", "say", "test");
            var output  = _filter.Filter(command);

            IfToken token = output.Arguments[0].Tokens[0] as IfToken;

            Assert.That(token, Is.Not.Null);

            Assert.That(token.Conditions[0].Not, Is.True);
        }
Esempio n. 2
0
        public void TestSimpleMatchesIf()
        {
            var command = new Command("if", "$var", "1..2", "say", "test");
            var output  = _filter.Filter(command);

            IfToken token = output.Arguments[0].Tokens[0] as IfToken;

            Assert.That(token, Is.Not.Null);

            Assert.That(token.Conditions[0].Not, Is.False);
            Assert.That(token.Conditions[0], Is.InstanceOf(typeof(MatchesCondition)));

            MatchesCondition matches = token.Conditions[0] as MatchesCondition;

            Assert.That(matches.LeftVariable.Name, Is.EqualTo("var"));
            Assert.That(matches.Matches, Is.EqualTo("1..2"));
        }
Esempio n. 3
0
        public void TestMultipleConditions()
        {
            var command = new Command("if", "$var", "1", "&&", "$left", "=", "$right", "say", "test");
            var output  = _filter.Filter(command);

            IfToken token = output.Arguments[0].Tokens[0] as IfToken;

            Assert.That(token, Is.Not.Null);

            Assert.That(token.Conditions.Count, Is.EqualTo(2));

            Assert.That(((MatchesCondition)token.Conditions[0]).LeftVariable.Name, Is.EqualTo("var"));
            Assert.That(((MatchesCondition)token.Conditions[0]).Matches, Is.EqualTo("1"));

            Assert.That(((OperationCondition)token.Conditions[1]).LeftVariable.Name, Is.EqualTo("left"));
            Assert.That(((OperationCondition)token.Conditions[1]).Operation, Is.EqualTo("="));
            Assert.That(((OperationCondition)token.Conditions[1]).RightVariable.Name, Is.EqualTo("right"));
        }
Esempio n. 4
0
        public void TestSimpleOperationIf()
        {
            var command = new Command("if", "$left", ">", "$right", "say", "test");
            var output  = _filter.Filter(command);

            IfToken token = output.Arguments[0].Tokens[0] as IfToken;

            Assert.That(token, Is.Not.Null);

            Assert.That(token.Conditions[0].Not, Is.False);
            Assert.That(token.Conditions[0], Is.InstanceOf(typeof(OperationCondition)));

            OperationCondition operation = token.Conditions[0] as OperationCondition;

            Assert.That(operation.LeftVariable.Name, Is.EqualTo("left"));
            Assert.That(operation.Operation, Is.EqualTo(">"));
            Assert.That(operation.RightVariable.Name, Is.EqualTo("right"));
        }
Esempio n. 5
0
        private Ast IfStatement()
        {
            if (!_tokenStream.IsMatch <IfToken>())
            {
                return(null);
            }

            IfToken token = _tokenStream.Take <IfToken>();

            _tokenStream.Take <LeftParensToken>();

            Ast predicate = Expression();

            if (predicate == null)
            {
                throw new InvalidSyntaxException("Condition of if statement must be an expression", _tokenStream.Current.Position, null);
            }

            _tokenStream.Take <RightParensToken>();

            Ast body = Statement();

            if (body == null)
            {
                throw new InvalidSyntaxException("Body of if statement must be a statement", _tokenStream.Current.Position, null);
            }

            if (!_tokenStream.IsMatch <ElseToken>())
            {
                return(new ConditionalBranch(token, predicate, body));
            }

            _tokenStream.Take <ElseToken>();

            Ast alternative = Statement();

            if (alternative == null)
            {
                throw new InvalidSyntaxException("An else statement must be followed by a statement", _tokenStream.Current.Position, null);
            }

            return(new ConditionalBranch(token, predicate, body, alternative));
        }
Esempio n. 6
0
        public Token GetToken()
        {
            State = LexicAnalyserState.Initial;
            Value = HasNext ? Character.ToString() : "";
            Token token = null;

            while (HasNext && token == null)
            {
                switch (State)
                {
                case LexicAnalyserState.Initial:
                    HandleInitial();
                    break;

                case LexicAnalyserState.NonTerminal:
                    token = new NonTerminalToken(Value);
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Space:
                    token = new SpaceToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Terminal:
                    token = new TerminalToken(Value);
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Empty:
                    token = new EmptyToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.NewLine:
                    token = new NewLineToken(Value);
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Identifier:
                    token = new IdentifierToken(Value);
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Number:
                    token = new NumberToken(Value);
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Var:
                    token = new VarToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Write:
                    token = new WriteToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Read:
                    token = new ReadToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.If:
                    token = new IfToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.End:
                    token = new EndToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Then:
                    token = new ThenToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Begin:
                    token = new BeginToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.While:
                    token = new WhileToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Do:
                    token = new DoToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.SemiColon:
                    token = new SemiColonToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.OpenParentheses:
                    token = new OpenParenthesesToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.CloseParentheses:
                    token = new CloseParenthesesToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Plus:
                    token = new PlusToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Sub:
                    token = new SubToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Great:
                    token = new GreatToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Less:
                    token = new LessToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Equal:
                    token = new EqualToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Repeat:
                    token = new RepeatToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Until:
                    token = new UntilToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.Attribution:
                    token = new AttributionToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.NotEqual:
                    token = new NotEqualToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.GreatOrEqual:
                    token = new GreatOrEqualToken();
                    CurrentIndex++;
                    break;

                case LexicAnalyserState.LessOrEqual:
                    token = new LessOrEqualToken();
                    CurrentIndex++;
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }

            return(token);
        }
Esempio n. 7
0
        protected string CreateIfCommand(params Condition[] conditions)
        {
            IfToken token = new IfToken(new List <Condition>(conditions));

            return(token.Compile(_env) + " test");
        }