private Swap ParseSwap()
        {
            var tx = _stream.Fixate();

            var arg0 = ParsePrimary();

            if (arg0 == null)
            {
                return(null);
            }

            var t = NextToken();

            if (!t.IsOperator(Operator.AssignSwap))
            {
                _stream.Rollback(tx); // Undo operator and 'primary' read

                return(null);
            }

            var node = new Swap();

            node.AddChild(arg0);

            var arg1 = ParsePrimary();

            if (arg1 == null)
            {
                throw SyntaxError.Make(SyntaxErrorMessages.PRIMARY_EXPECTED, t);
            }
            node.AddChild(arg1);

            t = NextToken();
            AssertDelimiter(Delimiter.Semicolon, t);

            return(node);
        }