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); }